简述Cookie、Session、(LocalStorage和SessionStorage)

  • 服务器通过 Set-Cookie 头给客户端一串字符串
  • 客户端每次访问相同域名的网页时,必须带上这段字符串
  • 客户端要在一段时间内保存这个Cookie
  • Cookie 默认在用户关闭页面后就失效,后台代码可以任意设置 Cookie 的过期时间
  • 大小大概在 4kb 以内
    Cookie 存在的问题
    用户可以随意篡改 Cookie

    2.Session(不翻译)

  • 将 SessionID(随机数)通过 Cookie 发给客户端
  • 客户端访问服务器时,服务器读取 SessionID
  • 服务器有一块内存(哈希表)保存了所有 session
  • 通过 SessionID 我们可以得到对应用户的隐私信息,如 id、email
  • 这块内存(哈希表)就是服务器上的所有 session
    Session 可以用 LocalStorage + 查询参数实现

    3.LocalStorage

  • LocalStorage 跟 HTTP 无关
  • HTTP 不会带上 LocalStorage 的值
  • 只有相同域名的页面才能互相读取 LocalStorage(没有同源那么严格)
  • 每个域名 localStorage 最大存储量为 5Mb 左右(每个浏览器不一样)
  • 常用场景:记录有没有提示过用户(没有用的信息,不能记录密码)
  • LocalStorage 永久有效,除非用户清理缓存

    4.SessionStorage(会话存储)

  • SessionStorage 跟 HTTP 无关
  • HTTP 不会带上 SessionStorage 的值
  • 只有相同域名的页面才能互相读取 SessionStorage(没有同源那么严格)
  • 每个域名SessionStorage 最大存储量为 5Mb 左右(每个浏览器不一样)
  • SessionStorage 在用户关闭页面(会话结束)后就失效。

一般来说,Session 基于 Cookie 来实现。

  • Cookie 保存在客户端,每次都随请求发送给 Server
  • Session 保存在 Server 的内存里,其 Session ID 是通过 Cookie 发送给客户端的
  • LocalStorage 不会随 HTTP 发给 Server
  • LocalStorage 的大小限制比 Cookie 大多了

8.LocalStorage 和 SessionStorage 的区别

  • 一个不会自动过期, LocalStorage 永久有效,除非用户清理缓存
  • 一个会自动过期。SessionStorage 在用户关闭页面(会话结束)后就失效。
总结:
  • cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
  • cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
  • sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
存储大小:
  • cookie数据大小不能超过4k。
  • sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
有期时间:
  • localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
  • sessionStorage 数据在当前浏览器窗口关闭后自动删除。
  • cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭