这里是修真院前端小课堂,每篇分享文从html
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】前端
八个方面深度解析前端知识/技能,本篇分享的是:程序员
【 请描述一下cookies,sessionStorage和localStorage的区别? 】数据库
1.背景介绍浏览器
SessionStorage, LocalStorage, Cookie这三者均可以被用来在浏览器端存储数据,并且都是字符串类型的键值对。 区别在于前二者属于WebStorage,建立它们的目的便于客户端存储数据。 而Cookie早在网景公司的浏览器中就开始支持,最初目的是为了保持HTTP的状态。安全
Cookie(也叫Web cookie或者浏览器Cookie)是服务器发送到用户浏览器并保存在浏览器上的一块数据, 它会在浏览器下一次发起请求时被携带并发送到服务器上。比较经典的,能够它用来肯定两次请求是否来自于同一个浏 览器,从而可以确认和保持用户的登陆状态。Cookie的使用使得基于无状态的HTTP协议上记录稳定的状态信息成为了可能。服务器
localStorage 是 HTML5 标准中新加入的技术,它并非什么划时代的新东西。 早在 IE 6 时代,就有一 个叫 userData 的东西用于本地存储,而当时考虑到浏览器兼容性, 更通用的方案是使用 Flash。而现在,localStorage 被大多数浏览器所支持,更多用他来存储数据。cookie
sessionStorage 与 localStorage 的接口相似, 但保存数据的生命周期与 localStorage 不一样。 作事后 端开发的同窗应该知道 Session 这个词的意思, 直译过来是“会话”。 而 sessionStorage 是一个前端的概念, 它只 是能够将一部分数据在当前会话中保存下来, 刷新页面数据依旧存在。 但当页面关闭后,sessionStorage 中的数据就会被清空session
2.知识剖析
在同一个页面中设置 Cookie,其实是按从后往前的顺序进行的。若是要先删除一个 Cookie,再写入一 个 Cookie,则必须先写入语句,再写删除语句,不然会出现错误Cookie是面向路径的。缺省路径 (path) 属性时 ,Web 服务器页会自动传递当前路径给浏览器,指定路径强制服务器使用设置的路径。在一个目录页面里设置的 Cookie 在另外一个目录的页面里是看不到的Cookie 必须在 HTML 文件的内容输出以前设置;不一样的浏览器 对 Cookie 的处理不一致,使用时必定要考虑;客户端用户若是设置禁止 Cookie,则 Cookie 不能创建。而且在客户端, 一个浏览器能建立的 Cookie 数量最多为 300 个,而且每一个不能超过 4KB,每一个 Web 站点能设置的 Cookie 总数不能超过 20 个并发
cookie的设置以及发送过程分为如下四步:
客户端发送一个http请求到服务器端
服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
客户端发送一个http请求到服务器端,其中包含Cookie头部
服务器端发送一个http响应到客户端
Storage类的相关成员
三者之间的区别对比:
特性 Cookie localStorage sessionStorage
特性 通常由服务器生成,可设置失效时间。若是在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清除,不然永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小 4K左右 通常为5MB
与服务器端通讯 每次都会携带在HTTP头中,若是使用cookie保存过多数据会带来性能问题 仅在客户端(即浏览器)中保存,不参与和服务器的通讯
易用性 须要程序员本身封装,源生的Cookie接口不友好 源生接口能够接受,亦可再次封装来对Object和Array有更好的支持
3.常见问题
COOKIE是如何工做的?
4.解决方案
COOKIE是如何工做的?
Cookie可用于客户端数据的存储,在没有其它存储办法时,使用这种方式是可行的,但随着如今浏览器开始支持各类各样
的存储方式而逐渐被废弃。 因为服务器指定Cookie之后浏览器的每次请求都会携带Cookie数据,这会带来额外的性能负
担(尤为是在移动环境下)。 新的浏览器API已经容许开发者直接在本地存储数据,如可使用Web storage API (本地
存储和会话存储)和IndexedDB(索引数据库)。
COOKIE主要用在如下三个方面:
会话状态管理(如用户登陆状态、购物车)
个性化设置(如用户自定义设置)
浏览器行为跟踪(如跟踪分析用户行为)
5.编码实战
6.扩展思考
三者的用途差别?
例如:曾经使用 Cookie 来保存用户在电商网站的购物车信息,现在有了 localStorage,Cookie就退休了。还有像一些 网页游戏会产生一些本地数据,也使用LocalStorage。但若是须要拆分页面,会跳转多个子页面的时候,就须要用到sessionStorage。
COOKIE的缺陷
每一个 HTTP 请求中都包含 Cookies,从而致使传输相同的数据减缓咱们的 Web 应用程序。
每一个 HTTP 请求中都包含 Cookies,从而致使发送未加密的数据到互联网上,可能会致使数据泄露,虽然进行过加密,可是攻击者拿到cookie后仍然能够登陆,由于难以识别是否为同一个用户在登录。
Cookies 只能存储有限的 4KB 数据,对于复杂的存储需求来讲是不够用的。
7.参考文献
参考资料:https://www.cnblogs.com/zr123...
—— Cookie、session和localStorage、以及sessionStorage之间的区别
参考资料:https://www.cnblogs.com/minig...
—— JS 详解 Cookie、 LocalStorage 与 SessionStorage
8.更多讨论
如何优化cookie?
关于安全性的考虑?
9.互动提问
sessionStroage有哪些应用场景?
答: 在不须要和服务器交互的场所,用来存储用户数据之类的,能够在路由页跳转的时候取出更改储存,减小调用接口的次数,减轻服务器压力。
用storage怎么来判断用户是否须要再登录?
答:能够用加密的方法存储,每次用户访问的时候能够取出调用服务器接口做为参数发送进行对比,存在帐号密码就直接跳过登陆页。
localStorage是否能够在同源窗口共享? 答:同一浏览器的相同域名和端口的不一样页面间能够共享相同的 localStorage,可是不一样页面间没法共享sessionStorage的信息。