我想避免打开两个应用程序窗口(或选项卡)的可能性。如果我的应用程序(LAMP + Javascript)安装在 http://www.domain.com 上并且用户正在浏览页面 http://www.domain.com/ user / 他/她无法打开另一个窗口,如 http://www.domain.com/system/ 。如果他/她打开另一个窗口,应用程序应显示错误消息。
这可能吗?
对于好奇的人:我需要这种行为,因为我的应用程序使用一些会话数据来识别操作序列。如果用户在同一浏览器上打开一个新窗口,通常一切都是正确的,但如果他/她启动一个新序列,前一个(在另一个窗口中)将会丢失。
答案 0 :(得分:2)
您无法阻止某人两次打开您的网站。
您可以为每个页面使用一个新的会话密钥,但这可能会有点笨拙......
答案 1 :(得分:2)
如上所述 - 您无法阻止某人两次打开您的网站。然而,正如我所看到的,你的问题实际上是确保每个浏览器会话都是唯一的。有很多方法可以达到这个目的,一个可能是由客户端生成一个随机数并通过ajax发送到后端使用而不是session-id,你可能会遇到一些持久性问题,但这些都很容易滑车。
答案 2 :(得分:2)
虽然其他所有人都说这是正确的,但你不能阻止某人两次打开你的网站,但可能会有一个解决方法。请注意,这不是100%的解决方案,需要您根据此开发更多代码。
据我了解,您有以下问题:
然而 - 您可以使用LSO - Local Shared Objects来完成此任务。这些是基于Flash的cookie类似的数据存储在客户端。他们是交叉浏览器&跨领域兼容。你可以找到一个名为EVERCOOKIE的漂亮的库来使用它们here。
通过设置这样的cookie,即使他打开一个新窗口,或者即使他在另一个浏览器中打开您的页面,您也可以跟踪该用户,只要浏览器共享相同的Flash安装等。
请注意,这不会阻止某人直接打开两个窗口,但它可以让您将其发送到与其他窗口中相同的序列状态。
您还应该意识到这不是100%的解决方案。总会有一些技巧来解决这个问题,虽然我认为普通用户无法得到它......
答案 3 :(得分:1)
我能想到这样做的唯一方法是在用户登录其他地方时隐藏/删除内容
所以你会a)需要用户登录...和b)记录用户登录时...和c)记录用户退出时
此方法仍然存在问题 - 您何时决定用户何时关闭浏览器并应从“已登录”列表中删除...
简而言之,答案是你无法可靠地阻止这个....
答案 4 :(得分:0)
我会使用服务器端的会话(即php),并利用load和window.unload事件来设置和销毁会话。
如果已创建会话,则之后打开的任何窗口都应检查会话值,并在显示错误消息后强制关闭。