我会仔细阅读你的每一个观点并讨论它们......
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,即使它们都加载到同一个窗口/选项卡中。
为了更具体地帮助您处理您的应用程序,我们必须了解您想要跟踪的每个状态及其用途。只有这样我们才能建议哪种机制最适合存储它。