Javascript 在浏览器中保存数据的最佳方法是';不能在选项卡之间共享吗?

Javascript 在浏览器中保存数据的最佳方法是';不能在选项卡之间共享吗?,javascript,angular,cookies,Javascript,Angular,Cookies,我正在做一个项目,很多事情都依赖于cookies。我们现在有一个奇怪的要求。我们的客户可以在不同的选项卡中使用不同的用户id登录 重要信息:会话存储是最好的存储方式,但有时我们在路由和许多其他情况下会丢失数据,因此我们开始将数据保存在会话存储以及cookie中 使用角度2和角度6 议题/问题: 由于所有内容都基于cookies,不同用户之间的数据彼此共享,导致业务损失是否有更好的方法来处理、存储数据而不是cookie? 为了解决问题1,我们使用了这种方法:当用户已经登录,并尝试使用不同的用户id

我正在做一个项目,很多事情都依赖于cookies。我们现在有一个奇怪的要求。我们的客户可以在不同的选项卡中使用不同的用户id登录

重要信息:会话存储是最好的存储方式,但有时我们在路由和许多其他情况下会丢失数据,因此我们开始将数据保存在会话存储以及cookie中

使用角度2和角度6

议题/问题

  • 由于所有内容都基于cookies,不同用户之间的数据彼此共享,导致业务损失是否有更好的方法来处理、存储数据而不是cookie?

    为了解决问题1,我们使用了这种方法:当用户已经登录,并尝试使用不同的用户id登录另一个选项卡时,我们会显示一个弹出窗口,显示“您已使用另一个用户id登录。是否要再次登录?”。如果用户单击“是”按钮,我们将激活当前选项卡并停用最后一个选项卡用户会话

    但这里的问题是,在许多情况下,我们需要删除特定的cookie。我尝试了Jquery cookie插件、ng2 cookie以及设置到期日,但每次我在chrome开发工具中打开应用程序时,我都会看到可用的cookie,并且没有被删除。每当我访问删除的cookie时,我都会得到cookie,并且逻辑失败

  • 那么第二个问题是,;删除cookie的更好方法是什么?我尝试了`,并设置了过期时间,但没有成功删除cookie

    我们的客户可以在不同的选项卡中使用不同的用户id登录

    这里要小心!这是一个非常不寻常的要求,没有一个浏览器打算处理,所以任何解决方案都将是一个黑客。我强烈建议您与客户讨论,并建议他们放弃这一要求


    假设这是完全不可能的,并且他们正在勒索您的家人,这是可以解决的-使用window.name属性来分割会话。对于会话,您仍将使用常用的cookie方法。这将需要一些javascript来检查空白名称,并需要一个Web服务来分配一个新名称。当然,您需要将名称注入到所有表单/URL中。

    您试图做的基本上是错误的浏览器模型。我认为,让两个单独的选项卡做不同事情的唯一干净方法是制作一个SPA,用户每次打开站点时都需要登录。一旦你涉及到重新加载站点,你就需要在某处存储数据,在这一点上,重新加载页面是因为你从一个页面移动到另一个页面,还是因为你正在打开第二个选项卡,都无关紧要;浏览器的操作方式都是一样的。这就是我们目前正在做的。但是,当一个用户已经登录,并且在另一个选项卡中使用另一个用户id再次登录时,将被罚款。问题是,当用户进入第一个会话并尝试在不重新加载的情况下执行某些操作时,所有内容都会受到干扰。您能再解释一下您不能使用会话存储的意思吗?在那里为您的案例保留一个标志,并在用户转到另一个选项卡时使用此()进行计算,如果该标志在适当位置,您可能可以在他第二次出现时“禁用”您的选项卡。当我说disable是指显示某种模式,除非他重新连接,否则不允许他按任何按钮。@anastasioselmanis在很多情况下,我会丢失会话存储中的数据。令人惊讶的是,不会从cookie中丢失相同的数据。一旦您在共享存储中存储任何内容,如会话存储或cookie,您就会在选项卡之间发生冲突。不,我所说的SPA本质上是指您不在任何类型的半永久共享存储中存储任何内容,而是将其全部保存在Javascript变量中。只要页面保持打开状态,这种情况就会持续,但它也保证不会与其他选项卡冲突。我同意使用window.name,但我们不能依靠它来验证用户是否使用相同的id或不同的id登录到另一个选项卡。我知道这已经变得一团糟,但我需要找到一个有效的解决方案。我只是建议使用window.name来细分会话数据-不作为会话标识符。(您没有告诉我们什么是服务器端/会话id当前是如何维护的)