Session | Cookie | LocalStorage | sessionStorage | |
---|---|---|---|---|
存储类型 | Object、KeyValue | KeyValue | KeyValue | KeyValue |
存储方式 | 服务器存储 | 浏览器存储 | 浏览器存储 | 浏览器存储 |
大小限制 | 无限制 | 4KB(20个限制,不同浏览器有不同个数限制) | 5MB | 5MB |
有效时间 | 短期(根据HttpSession设置) | 短期(根据cookie设置) | 长期永久 | 会话结束即清除 |
安全性 | 高 | 低(设置https时,客户端无法直接读取,安全性较好) | 低 | 高 |
跨域 | 允许 | 不允许 | 不允许 | 不允许 |
使用场景 | 服务器端保持用户登录状态 | 客户端保持登录状态、个性化信息 | 数据缓存、系统配置、Token | 敏感操作信息等 |
Token
最后补充一下Token,这些浏览器数据存储技术与Token有说不清的关系,但技术本身是没任何关系,只跟场景有一定的联系。
Token是令牌,一般而言,Web中的Token代指JWT(JSON Web Token)中的Token。服务端根据用户信息生成了Token,需要依赖介质存储于客户端,从安全性考虑,由于Cookie设置了HttpOnly之后,XSS跨站脚本攻击是能防御的,因此大部分Token都存储于Cookie之中,在发送请求时附带cookie即可。
当然,如果你愿意,也是可以将Token存储于SessionStorage、LocalStorage,甚至是window对象中。
引用:
https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html
http://javascript.ruanyifeng.com/bom/cookie.html