选项卡特定的 Cookie,而不使用会话存储或任何 HTML5 功能

2022-08-30 15:19:49

我有兴趣让用户能够在我的 Web 应用程序上使用多个用户会话 Cookie 登录和注销。目前,身份验证是标准的,如果用户提供其Cookie中可用的身份验证令牌,则唯一标识符允许我在用户访问我们的网站时对其进行身份验证。典型的用例适用,因为如果用户从一个选项卡注销,则会将他们从另一个选项卡中注销。现在,它需要让用户从两个唯一的浏览器实例登录,以便能够登录到两个不同的帐户。

有没有一种非HTML5方法(使用标准的javascript cookie)来获得特定于选项卡的cookie标识符?我假设没有明确的方法可以解决这个问题,这需要来自后端的某种黑客+合作。如果有一个不使用HTML5的解决方案是有意义的,那将是理想的。


答案 1

你不能。

有办法处理这种情况,但没有一个是简单的。

如果你愿意,你必须告诉用户这样做:如何极客

来自文档:使用 sessionStorage 存储的数据不会跨浏览器选项卡保留,即使两个选项卡都包含来自同一域源的网页也是如此。换句话说,sessionStorage 中的数据不仅局限于调用页面的域和目录,还局限于包含该页面的浏览器选项卡。将其与会话 Cookie 形成对比,会话 Cookie 确实会将数据从选项卡保存到选项卡。


答案 2

不久前,我实现了类似的行为。所以,我所做的是这样的:

  1. 为此,您需要在URL中携带specetId或作为页面内容的一部分。
  2. 加载登录页面后,删除会话 Id Cookie。
  3. 提交 登录名时,服务器会在 url 中或作为 html 响应正文的一部分为您提供登录页面以及 sessionId。
  4. 从现在开始,在每次服务器调用之前,将会话 Cookie 设置为 URL 或页面内容中的会话 Cookie。
  5. 因此,每个选项卡将在任何服务器调用之前设置自己的cookie,这将使请求在服务器上与正确的会话一起登陆。