【发布时间】:2021-07-28 05:42:25
【问题描述】:
我们正在寻找一种方法来防止用户在同一浏览器下的多个选项卡中打开应用程序。
想法是插入其中一个查询过滤器,然后可能会访问会话,并在继续之前检查是否有已打开的选项卡。
我查看了 httpSession 和 HttpRequest 的资料,但没有发现任何帮助。
java 端是否有任何功能可以知道该应用是否已在另一个选项卡中打开?
谢谢,
【问题讨论】:
标签: javascript java servlets zk
我们正在寻找一种方法来防止用户在同一浏览器下的多个选项卡中打开应用程序。
想法是插入其中一个查询过滤器,然后可能会访问会话,并在继续之前检查是否有已打开的选项卡。
我查看了 httpSession 和 HttpRequest 的资料,但没有发现任何帮助。
java 端是否有任何功能可以知道该应用是否已在另一个选项卡中打开?
谢谢,
【问题讨论】:
标签: javascript java servlets zk
有一些方法可以用 Javascript 来完成。
查看过去的问题/答案
但如果...
,所有这些 javascript 技术都无法工作您最终会使用多种功能来尝试防止这种情况发生(但这是一场失败的战斗,并且有无数种方法可以绕过它)。
如果您有登录名,您需要跟踪过去的登录名,并在新登录名时断开/使其他登录名无效。 (这将有助于多个浏览器和设备的尝试)。如果尝试使用旧会话,则服务器端的授权层将使旧会话无效。
如果您在同一个浏览器中有多个选项卡,则旧问题/答案中的 javascript 技术可能是最好的。
也有人尝试使用 websocket 作为单点通信,但我不明白它是如何工作的,但你会在研究中遇到它。
【讨论】:
从服务器的角度来看,请求来自相同的浏览器选项卡、不同的选项卡、不同的浏览器或不同的设备都没有关系。两个选项卡可以共享同一个会话。服务器(或 servlet)无法知道请求是来自选项卡 A 还是选项卡 B。选项卡是浏览器功能,它不会在 HTTP 标头中发送。
如果您能详细说明为什么要这样做,我可能会给出更好的答案。
【讨论】: