如何检测用户是否为同一会话打开两个选项卡?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (151)

我使用CakePHP完成了一个预订应用程序,这涉及到签出页面之前的几个步骤。在这些步骤之间,我将信息存储在会话中。

它的工作原理是第一步要求他们填写他们的信息。当进入步骤2时,步骤1中的信息将保存到会话对象中。当它们在其他步骤中进行时,这个过程会重复。最后,当他们结帐时,所有的数据都被保存到数据库中。

如果用户在浏览器中打开应用程序的一个实例,一切都很好。但是,一旦在同一个浏览器中为同一个应用程序打开了另一个页面或另一个选项卡,就会出现问题。

假设他们在Tab A和Tab B中打开了应用程序的两个实例。在Tab A中,他们输入了步骤1中的详细信息,然后继续执行步骤2。然后用户在表B中做同样的事情。

在最后一步,当用户进行签出时,表A中的信息与表B中的信息相同。

现在,我只能认为最好的方法是防止用户在两个浏览器实例中打开同一个应用程序。

当用户试图在Tab B中打开另一个实例时,是否有一种方法可以首先检测并提示用户在Tab A中完成预订表单?

提问于
用户回答回答于

你可以在步骤1第一次启动时将会话标记为已开始的会话。确保服务器端遵循正确的步骤(即,在步骤1完成后,它们不会返回到步骤1,除非它们具体单击链接才能这样做。)基本上,跟踪服务器上的当前步骤并根据需要对其进行更新。如果用户做了一些意想不到的事情,你可以给他们重新启动的选项。

扫码关注云+社区

领取腾讯云代金券