javascript - 即使已经在另一个选项卡中登录,新选项卡也会打开登录页面

标签 javascript session backbone.js authentication frontend

我是网络开发新手,我正在尝试实现登录功能。我已经成功实现了登录功能。当我打开 www.bla.com/login 时,我可以登录帖子,该帖子会被重定向到主页。

问题:如果打开另一个选项卡并输入:www.bla.com/login,它会再次打开登录页面。理想情况下,如果我登录到其中一个选项卡,我应该被重定向到主页,无论 URL 指向登录页面。

P.S:我不确定我需要在这里分享哪一部分代码,因为我不确定是什么导致了这个问题。如果我需要发布我的代码库,请帮助或告诉我。我使用 JavaScript 和主干作为前端。

编辑

我有一个 REST 服务,当我登录时,该服务会受到攻击,并且 REST 服务会返回一个用户特定 token 。我使用此用户特定 token 再次调用另一个 Rest 服务来获取更多用户特定数据。

所以,基本上我需要检查收到的 token 。我收到的 token 已存储在浏览器 session 中。但是当我转到另一个选项卡并尝试访问该 token 时,其为 NULL。所以我假设浏览器中的每个选项卡不共享 session 存储。如果是,那么我应该将该 token 放在哪里,以便如果有人点击登录页面,我应该检查 token 是否已存在。如果存在则重定向到主页。请指导。

最佳答案

如果没有看到你的代码,很难说,所以让我做出一个有根据的猜测:

在用户成功登录后,您很可能不会使用某些 sessionId 创建 cookie。 然后,该 cookie 将在发送到服务器的每个请求中使用,以证明用户确实经过身份验证。

当您打开新选项卡并且没有创建 cookie/ session 时,应用程序的这个新实例不知道用户已登录的另一个实例。

您可能想查看this answer

编辑

也许您正在使用sessionStorage而不是cookie。至少当我读到您的应用程序的行为时我会这么说。

请参阅docs for session storage

The sessionStorage property allows you to access a session Storage object. sessionStorage is similar to Window.localStorage, the only difference is while data stored in localStorage has no expiration set, data stored in sessionStorage gets cleared when the page session ends. A page session lasts for as long as the browser is open and survives over page reloads and restores. Opening a page in a new tab or window will cause a new session to be initiated, which differs from how session cookies work.

因此,请确保您的应用程序将 token 存储在 cookielocalStorage 中。而且它还能正确地读取它们。也许 cookies 已创建,但从未读取?

关于javascript - 即使已经在另一个选项卡中登录,新选项卡也会打开登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38333440/

相关文章:

java - 仅修改当前请求的SecurityContext

javascript - html5 SessionStorage 在 android 模拟器中不起作用

javascript - 不在模板中显示模型默认值

javascript - 使用 Ramda 用虚假值填充数组的剩余长度

javascript - document.getElementById ("someId") 比。一些ID

javascript - JavaScript 函数中的 var 作用域

backbone.js - 使用 Twitter Bootstrap 和 Backbone.js 构建的树?

javascript - 对象属性未定义,console.log() 后一行

python - Python 中的 session 超时

javascript - 这次脊椎出了什么问题吗?