如何避免打开两个浏览器窗口?

时间:2012-03-14 19:39:28

标签: php jquery browser

我想避免打开两个应用程序窗口(或选项卡)的可能性。如果我的应用程序(LAMP + Javascript)安装在 http://www.domain.com 上并且用户正在浏览页面 http://www.domain.com/ user / 他/她无法打开另一个窗口,如 http://www.domain.com/system/ 。如果他/她打开另一个窗口,应用程序应显示错误消息。

这可能吗?

对于好奇的人:我需要这种行为,因为我的应用程序使用一些会话数据来识别操作序列。如果用户在同一浏览器上打开一个新窗口,通常一切都是正确的,但如果他/她启动一个新序列,前一个(在另一个窗口中)将会丢失。

5 个答案:

答案 0 :(得分:2)

无法阻止某人两次打开您的网站。

您可以为每个页面使用一个新的会话密钥,但这可能会有点笨拙......

答案 1 :(得分:2)

如上所述 - 您无法阻止某人两次打开您的网站。然而,正如我所看到的,你的问题实际上是确保每个浏览器会话都是唯一的。有很多方法可以达到这个目的,一个可能是由客户端生成一个随机数并通过ajax发送到后端使用而不是session-id,你可能会遇到一些持久性问题,但这些都很容易滑车。

答案 2 :(得分:2)

虽然其他所有人都说这是正确的,但你不能阻止某人两次打开你的网站,但可能会有一个解决方法。请注意,这不是100%的解决方案,需要您根据此开发更多代码。

据我了解,您有以下问题:

  1. 如何确定用户是否打开了包含共享会话数据的窗口/标记的页面(例如Chrome中的两个标签,2个Chrome窗口等) - 这是最简单的部分。
  2. 如何确定用户是否在其他浏览器中打开了您的页面(即一次在FF& Chrome中打开) - 这是一个棘手的问题。
  3. 然而 - 您可以使用LSO - Local Shared Objects来完成此任务。这些是基于Flash的cookie类似的数据存储在客户端。他们是交叉浏览器&跨领域兼容。你可以找到一个名为EVERCOOKIE的漂亮的库来使用它们here

    通过设置这样的cookie,即使他打开一个新窗口,或者即使他在另一个浏览器中打开您的页面,您也可以跟踪该用户,只要浏览器共享相同的Flash安装等。

    请注意,这不会阻止某人直接打开两个窗口,但它可以让您将其发送到与其他窗口中相同的序列状态。

    您还应该意识到这不是100%的解决方案。总会有一些技巧来解决这个问题,虽然我认为普通用户无法得到它......

答案 3 :(得分:1)

我能想到这样做的唯一方法是在用户登录其他地方时隐藏/删除内容

所以你会a)需要用户登录...和b)记录用户登录时...和c)记录用户退出时

此方法仍然存在问题 - 您何时决定用户何时关闭浏览器并应从“已登录”列表中删除...

简而言之,答案是你无法可靠地阻止这个....

答案 4 :(得分:0)

我会使用服务器端的会话(即php),并利用load和window.unload事件来设置和销毁会话。

如果已创建会话,则之后打开的任何窗口都应检查会话值,并在显示错误消息后强制关闭。