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

2022-08-30 21:17:45

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

它的工作原理是步骤1要求他们填写他们的信息。转到步骤 2 时,步骤 1 中的信息将保存到会话对象中。当他们继续执行其他步骤时,该过程将重复。最后,当他们签出时,所有数据都将保存到数据库中。

如果用户在浏览器中打开应用程序的一个实例,则一切正常。但是,一旦他们在同一浏览器中为同一应用程序打开了另一个页面或另一个选项卡,问题就会发生。

假设他们在选项卡 A 和选项卡 B 中打开了应用程序的两个实例。在选项卡 A 中,他们在步骤 1 中输入了详细信息,然后继续执行步骤 2。然后,用户在选项卡 B 中执行相同的操作。

在用户执行签出的最后一步,选项卡 A 中的信息与选项卡 B 中的信息相同。

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

有没有办法检测并提示用户在尝试在选项卡 B 中打开另一个实例时首先在选项卡 A 中完成预订表单?


答案 1

1.同样的问题(和解决方案):https://sites.google.com/site/sarittechworld/track-client-windows

2.您可以通过POST或GET发送信息


答案 2

您可以在首次启动步骤 1 时将会话标记为已启动。确保服务器端他们遵循正确的步骤(即,在步骤1完成后,他们不会返回到步骤1,除非他们专门单击链接来执行此操作。基本上,跟踪他们在服务器上的当前步骤并根据需要进行更新。如果用户执行了意外操作,您可以为他们提供重新开始的选项。

我想知道表单上带有时间戳的隐藏字段是否会有所帮助。虽然有点同样的想法。

警告:此过程可能会破坏浏览器后退按钮的本质。我讨厌自己在我的一个项目中让这种情况发生。

对于跨浏览器支持,您需要将其与用户帐户或保留的内容相关联。


推荐