关于cookie,session,sessionStorage,localStorage
有关于这些在web应用用到的存储一直有些不清楚,今天想自己去找找资料,理一理。
HTTP Cookie
HTTP Cookie是服务器响应客户端时发送的一小块数据(大小不大于4KB),服务器使用Set-Cookie响应头部向客户端传达Cookie信息。客户端接收到后存储起来,之后每次向该服务器请求时头部都会有Cookie信息,服务器通过Cookie来辨认浏览器的状态,这样在基于无状态的HTTP协议传输中记录了稳定的状态信息。
一般用于以下情况:
- 会话状态管理:默认情况下Cookie在浏览器会话时存储,浏览器关闭后就被自动删除(如登录状态、购物车、游戏分数)
- 个性化设置:设置有效期持久保存(如应用的主题、皮肤)
Set-Cookie:名称=值; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
//或者Max-Age=3600s
//通过document.cookie访问当前网站的cookie,但为了预防 XSS 以及 CSXR,后台会在Set-Cookie里添加HttpOnly禁止使用Javascript访问Cookie,需要检查过滤出敏感操作,并且Cookie要设置的时效性要短。
- 浏览器跟踪用户行为 (如记录用户浏览该系统的次数,用户浏览时间等)
session
session机制是一种服务端的机制,当被客户端请求创建session时,服务端会检查客户端请求中是否含有session_id,如果含有则去散列表匹配信息,若未找到匹配信息,则创建session对象,然后将session_id返回给客户端保存下来,在交互过程中客户端将session_id携带发送至服务端。这种机制用于识别客户端状态,在会话期间有效,浏览器关闭后被清除。(可以是cookie的一种,可以将session_id附加在url后面作为查询字符串/附加信息)
Web Storage
因为使用Cookie时每次请求头部都携带,这样造成了额外性能开销,尤其是在移动端。因此Cookie渐渐被淘汰,浏览器允许将数据存储到本地如Web Storage(大小大于5M左右)。
- sessionStorage:通过Window.sessionStorage访问,是页面会话时临时存储的数据,当浏览器关闭后被自动删除。
- localStorage:通过Window.localStorage访问,能够持久地保存在本地浏览器中,浏览器关闭后也不会被删除掉。
//两者都是Storage对象。
IndexedDB
IndexedDB是是浏览器分配给应用程序的事务型数据库,在客户端能够存储大量结构化数据(包括文件/blob),使用Javascript语言操作。