【问题标题】:Express Js: req.session vs cookie vs local storage vs session storageExpress Js:req.session vs cookie vs local storage vs session storage
【发布时间】:2020-02-04 04:45:06
【问题描述】:

我是 Express JS 和前端的新手。我正在开发一个应用程序,它使用 req.session 来维护用户会话和本地存储来存储一些其他临时信息。

我已经看过各种文章来了解上述之间的差异,但我仍然不清楚每个人在何时使用以及持续多长时间。

据我说:

1.req.session:服务器维护这个会话。当用户清除 cookie 时,这会被清除。

2.cookies:发送cookies到服务器维护认证

3.local storage:这会一直持续到用户删除cookies?

  1. 会话存储:这是由浏览器维护并持续一个标签。

【问题讨论】:

    标签: javascript node.js express cookies


    【解决方案1】:

    都是storage mechanisms的不同类型,常用在web application development中。

    但是问题在于选择正确的。


    简而言之

    Cookie Storage

    Cookie 是浏览器的一种存储机制,但可以通过请求从服务器端访问。开发人员使用 cookie 来存储应该可以从服务器和客户端访问的数据。

    示例:身份验证令牌、分析数据

    Session

    会话存储是一种服务器端存储机制,只能被服务器访问。所以我们不能直接从浏览器访问。使用会话存储机密信息。

    会话关闭时,会话中的数据将被销毁。

    Local Storage

    本地存储就像 Cookie 但是我们无法从服务器访问,我们可以存储比 cookie 更多的数据,并且除非我们清除它不会过期。

    Cookie - 4 KB & 本地存储 - 5 MB

    Session Storage

    会话存储类似于本地存储。但唯一的区别是,本地存储不会过期会话存储会在页面会话结束时被销毁。会话存储在每页(标签)中保持不同的会话

    【讨论】:

      【解决方案2】:

      我会仔细阅读你的每一个观点并讨论它们......

      1) req.session:服务器维护这个会话。当用户清除 cookie 时,这将被清除。

      如果您将其保存在持久存储(磁盘支持的数据存储)中,则可以根据需要保持此状态。当用户清除他们的 cookie 时,服务器将失去对它对应的客户端的跟踪。根据您管理持久用户存储的方式,您可能能够在用户再次登录时重建以前的会话对象(允许您使用他们的用户 ID 在数据库中找到他们的持久状态,创建新的会话 cookie,构建一个新的会话对象,然后用一个新的会话对象重新连接那个浏览器)。

      2) cookie: cookie 被发送到服务器以维护身份验证

      这是对 cookie 实用性的过度简化。 Cookies 允许服务器在用户的浏览器中设置一些状态,这些状态将随着来自该特定浏览器的每个请求返回给服务器。 Cookie 通常用于跟踪经过身份验证的客户端,并且通常用于保存服务器端会话对象的密钥。 Cookie 还可用于数以千计的其他用途(用户站点偏好、跟踪 ID、其他用户状态等)。

      3) 本地存储:这会一直持续到用户删除 cookie?

      浏览器本地存储与 cookie 完全没有联系。它是浏览器中一个单独的本地数据存储,只有网页中的客户端 Javascript 才能访问。删除 cookie 与删除本地存储无关。它们是可以单独保留或删除的单独项目。服务器根本无法访问本地存储。此外,本地存储是分段的,因此来自一个网站的本地存储值不能被另一个站点的页面中的 Javascript 访问。

      4) 会话存储:这是由浏览器维护并在一个标签页中持续存在。

      您所说的“会话存储”不是很清楚。有“会话 cookie”,它们在创建时被特意指定为仅在给定浏览器运行时持续存在。如果浏览器存在,然后一段时间后重新启动,则任何会话 cookie 都将消失。它们的目的通常是用于短期 cookie,而不是在用户当前所做的事情之外持续存在。

      另一个可能的意思是会话存储可能是服务器上的长期持久存储(通常在磁盘上的数据库中),用于各种用户属性或您想要持续很长时间的状态。想象一下,用户填充了一个购物车,并且您希望他们能够在他们从一个设备移动到另一个设备以及在很长一段时间内从其中添加/删除东西时无限期地保留该购物车。对于这些类型的事情,您通常不会依赖会话对象来跟踪这些,而是​​使用数据库作为该数据的主要来源。当前正在处理的某些数据子集可能会缓存在服务器端会话对象中,但这只是为了方便,而不是作为长期存储。

      或者您的意思是浏览器中的Window.sessionStorage。这与 localStorage 类似,但仅在浏览器打开期间持续存在(类似于会话 cookie 的生命周期),并且与 localStorage 不同,每个选项卡或窗口都有自己的 sessionStorage。与 localStorage 一样,每个来源都有自己的 sessionStorage 一些来自一个来源的页面无法访问来自不同来源的页面的 sessionStorage,即使它们都加载到同一个窗口/选项卡中。


      为了更具体地帮助您处理您的应用程序,我们必须了解您想要跟踪的每个状态及其用途。只有这样我们才能建议哪种机制最适合存储它。

      【讨论】:

      • 您将session storagesessions 混淆了。两者都不一样。
      • 会话存储是指window的会话存储。 developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
      • @AnchikaAgarwal - 好的,这是有道理的。这就像 localStorage,但只在浏览器运行时持续存在。当浏览器关闭时,Window.sessionStorage 将被清除。每个选项卡或窗口都有自己的 sessionStorage。我将其添加到我的答案中。
      【解决方案3】:

      req.session 当用户访问该站点时,它会为用户创建一个新的会话对象并为他们分配一个 cookie。 每当用户再次从同一客户端请求时,都会检查 cookie,发送到服务器进行处理并更新存储的会话信息。

      Cookies、Local Storage(LS)和Session Storage(SS)的区别如下。

      1. Cookies 在服务器端处理,而 LS 和 SS 数据从不发送到服务器。它们存储在本地。
      2. Cookie 的存储容量最大为 4 KB,而 LS 和 SS 的存储容量超过 5 MB。
      3. Cookie 大多只存储会话 ID。而 LS 和 SS 可以存储更多信息,例如用户信息或页面浏览历史记录。
      4. 当用户关闭选项卡(会话结束)时,SS 会被清除。而 Cookie 可以通过清除 cookie 来删除,LS 可以通过删除浏览器缓存来清除。

      如果我记得还有什么,我会更新答案。

      【讨论】:

        猜你喜欢
        • 2014-06-30
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 2010-10-07
        相关资源
        最近更新 更多