Javascript 如何跨选项卡共享超时以仅触发一次或阻止在另一个选项卡中执行超时

Javascript 如何跨选项卡共享超时以仅触发一次或阻止在另一个选项卡中执行超时,javascript,browser,oauth-2.0,settimeout,Javascript,Browser,Oauth 2.0,Settimeout,在我的SPA中,我使用超时在令牌过期之前刷新令牌。一旦我基于当前存储的令牌过期时间登录应用程序,就会设置此超时 例如,如果令牌在上午12:00过期,我会设置一个超时,在晚上11:50刷新令牌 比如: window.setTimeout(myFunc, token.expire - 10 minutes in MS); 如果我的应用程序有一个标签,那么一切都会很好地工作 但是,如果我打开两个不同的选项卡,并且由于令牌由cookie跨选项卡共享,两个选项卡的超时都将设置为在晚上11:50触发,从而

在我的SPA中,我使用超时在令牌过期之前刷新令牌。一旦我基于当前存储的令牌过期时间登录应用程序,就会设置此超时

例如,如果令牌在上午12:00过期,我会设置一个超时,在晚上11:50刷新令牌

比如:

window.setTimeout(myFunc, token.expire - 10 minutes in MS);
如果我的应用程序有一个标签,那么一切都会很好地工作

但是,如果我打开两个不同的选项卡,并且由于令牌由cookie跨选项卡共享,两个选项卡的超时都将设置为在晚上11:50触发,从而由于同时请求而导致错误,并且令牌刷新请求失败

我在想我怎么能只在1个选项卡中触发超时,即使它同时在第二个选项卡中被设置为触发

例如,像这里的多线程一样,我可以做些什么来阻止第二个选项卡超时

会话存储是否有任何帮助


任何想法都将不胜感激。

问题是,如果您选择一个选项卡作为启动选项卡,那么如果您关闭该选项卡会怎么样?然后另一个不会启动,因为您已经选择了一个-一个解决方案可能是使用localStorage作为互斥-不过,最好是在服务器端解决这一问题,即几乎同时发送两个(或更多)请求不会破坏这一点。两个选项卡仍然会超时,但到时候,只有一个会被触发,所以我在寻找一种方法来阻止第二个被解雇。因此,如果我关闭一个选项卡,我们是安全的,剩下的选项卡将触发超时。我想使用localStorage作为互斥锁并不总是有保证的,因为当我在localStorage中设置某些内容时,有一个很大的变化,即第二个选项卡超时(如果已经触发)。。因为两者都将在同一秒启动..还有广播频道-或者甚至可能使用serviceworkers-当然,在旧浏览器中两者都不可用。。。至于有一个很大的机会——我想说的是,这个机会没有你想象的那么大——通过在超时时间中添加随机毫秒,可能性更小:p@JaromandaX我不知道,但现在来看,在标签之间交流似乎很酷,还发现其他有趣的东西。我会看看我如何利用它来达到我的目的