【问题标题】:sessionstorage in angular project角度项目中的会话存储
【发布时间】:2020-11-25 03:51:16
【问题描述】:

在我的 Angular 9 项目中,不选择“记住我”的用户,我将他的登录令牌和详细信息存储在 sessionStorage 中。选择被记住的用户的详细信息存储在本地存储中。

当我注意到详细信息存储在 sessionstorage 中的用户无法打开应用程序的重复选项卡时,问题出现了,而不会丢失令牌详细信息。因为会话存储不会将数据从一个选项卡保存到另一个选项卡。

如何解决这个问题,为任一用户存储数据.. 记住/不记住。以便用户也可以打开其他选项卡。

【问题讨论】:

  • 你可以把它保存在localStorage吗?或者您可以将其保存在您的令牌中

标签: javascript local-storage session-storage


【解决方案1】:

这实际上是sessionStorage 的预期和默认行为。新选项卡被视为第二个“会话”,因此无法访问存储在不同会话/选项卡中的任何内容。

来自文档:

  • 只要浏览器打开,页面会话就会持续,并且在页面重新加载和恢复后仍然存在。

  • 在新选项卡或窗口中打开页面会使用顶级浏览上下文的值创建一个新会话,这与会话 cookie 的工作方式不同。

  • 使用相同的 URL 打开多个选项卡/窗口会为每个选项卡/窗口创建 sessionStorage。

  • 关闭选项卡/窗口会结束会话并清除 sessionStorage 中的对象。

因此,sessionStorage 不是您想要的。您最好使用localStorage 并使用removeItem()

【讨论】:

  • 那么对于选择“不记得我”的用户我应该遵循什么正确的逻辑,我构建了这个应用程序,就像如果用户选择不被记住,下次他重新打开应用程序时,他应该被登录出..
  • 如上所述,当用户关闭应用程序时,使用localStorageremoveItem 作为该用户的ID。然后他们下次打开应用程序时,他们的信息将不再出现在他们的 localStorage 中。
  • 是否有任何这样的角度钩子,它只在浏览器选项卡关闭时运行。我得到了一些,但它们甚至在页面刷新时也会执行。
  • 没有专门的 Angular 钩子,没有。看看这个实现:stackblitz.com/edit/angular-browser-or-tab-close-event
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 2017-03-20
相关资源
最近更新 更多