【问题标题】:To store session data, what are the difference between using a cookie with no max-age Vs sessionstorage?要存储会话数据,使用没有 max-age 的 cookie 与会话存储有什么区别?
【发布时间】:2020-11-10 20:04:09
【问题描述】:

我只想为当前浏览器会话存储某个设置(直到浏览器窗口未关闭)

我有两个选择:

  • 设置一个没有 max-age 的 cookie(视为会话 cookie)
  • 使用会话存储

要存储会话数据,使用没有 max-age 的 cookie 与使用会话存储有什么区别?

【问题讨论】:

    标签: session-cookies session-storage


    【解决方案1】:

    主要区别在于 cookie 和会话存储在不同的位置。

    Cookie 存储在用户的浏览器中,并随用户向服务器发出的每个请求发送。这意味着您必须注意要存储的数据的大小,并确保不会在其中存储任何敏感数据(除非您在将数据存储到 cookie 之前对其进行加密)。

    会话将数据存储在服务器上,因此您不必担心大小和安全性。为了让服务器知道哪个会话数据属于哪个请求,使用了一个 cookie,该 cookie 在浏览器窗口关闭时标记为过期。

    因此,根据您要存储的数据,您可以使用任何一种。

    【讨论】:

    • 感谢您的解释。然而,sessionstorage 指的是 sessionStorage api(客户端)。随时更新您的答案,我很乐意接受(在此处评论以便我收到通知)
    【解决方案2】:

    会话 cookie 和 Window.sessionStorage 解决不同的问题。

    Cookies

    Cookie 旨在在浏览器和服务器之间传递数据。当您的浏览器存储网站的 cookie 时,未来对该网站的请求将包括与该网站关联的 cookie(HTTP Cookie 标头)。服务器还可以使用 Set-Cookie HTTP 响应标头更新浏览器的 cookie。

    会话 cookie 通常用于通过在每次请求时将会话令牌传递给服务器来维护“服务器会话”。服务器使用此令牌在与该令牌关联的服务器上查找会话数据。

    网络存储 API

    Web Storage API(localStorage 和 sessionStorage)用于仅在浏览器中存储数据。此数据不会在浏览器和服务器之间自动传递。

    会话 cookie 与 sessionStorage

    “会话”的概念

    会话 cookie 和 sessionStorage 对“会话”有不同的概念。

    对于会话 cookie,会话在访问同一站点的所有浏览器选项卡之间共享,并在所有浏览器窗口关闭时结束。

    对于 sessionStorage,每个选项卡(或"browsing context")都有自己唯一的会话,并且会话在选项卡关闭时结束。这可以被认为更像是“标签会话”而不是“浏览器会话”。

    因此,如果您想在多个选项卡之间共享数据,单独使用 sessionStorage 是行不通的。您可以使用 localStorage、会话 cookie 或其他替代方法来同步此数据。

    存储大小

    Cookie 的大小比 sessionStorage 更受限制。如果您了解每个请求都将 cookie 传递给服务器,那么这是有道理的。最大尺寸因浏览器而异。查看这些 StackOverflow 帖子了解更多详情:

    防御 XSS

    标有HttpOnly 属性的Cookie 无法被页面上运行的JavaScript 访问。这可以方便地防御Cross Site Scripting (XSS) 攻击。

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 2016-02-27
      • 2016-01-21
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2012-06-30
      • 2016-10-19
      • 2018-06-26
      相关资源
      最近更新 更多