繁体   English   中英

Express Js:req.session vs cookie vs local storage vs session storage

[英]Express Js: req.session vs cookie vs local storage vs session storage

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

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

据我说:

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

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

3.local storage:这一直存在,直到用户删除 cookies?

  1. session 存储:这由浏览器维护并持续一个选项卡。

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

问题是选择正确的。


简而言之

Cookie Storage

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

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

Session

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

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

Local Storage

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

Cookies - 4 KB 和本地存储 - 5 MB

Session Storage

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

我会 go 通过你的每一个观点并讨论它们......

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

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

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

这是 cookies 实用程序的过度简化。Cookies 允许服务器在用户的浏览器中设置一些 state,该特定浏览器的每个请求将返回给服务器。 Cookies 通常用于跟踪经过身份验证的客户端,并且通常用于将密钥保存到服务器端 session object。还有成千上万的其他东西 cookies 也可以用于(用户站点首选项,跟踪 ID,其他用户 state, ETC...)。

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

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

4) session storage:这由浏览器维护并持续一个选项卡。

不太清楚“会话存储”是什么意思。 有一些“会话 cookie”,它们在创建时被有意指定为仅在给定浏览器运行时持续存在。 如果浏览器存在,然后一段时间后重新启动,则任何 session cookies 都将消失。 它们的目的通常是短期的 cookies,并不意味着持续超出用户当前正在做的事情。

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

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


为了更具体地帮助您处理您的申请,我们必须了解您想要跟踪的 state 的每一部分及其用途。 只有这样我们才能建议哪种机制最适合存储它。

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

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

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

如果我想起其他任何事情,我会更新答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM