js如何检测两个浏览器窗口是否打开同一站点?

我试图检测用户是否在一个选项卡中打开了我的网站,然后在另一个选项卡中将其打开。然后,这应该在新打开的选项卡上向用户显示警告。

现在,我正在每秒发送一次“保持 Activity ” ajax调用回服务器。然后,这会使用唯一的ID将“上次激活”时间记录在数据库中。加载新页面时,它将检查该用户(由userID标识)在最近2秒钟内是否处于 Activity 状态。

这感觉效率很低。当用户刷新页面时,它的效果也不佳。 (不到2秒)。我将2秒检查的时间比keepalive调用的时间长,以允许较慢的连接。

问)我是否正在按照正确的方式进行操作?或者是否有更简单的方法可以执行此操作?我听说Gmail和Facebook可能会做类似的事情,但是我找不到它们所使用的网站功能。

实际的代码使用了许多内部函数,因此这是一般的想法:

伪代码:

Page load;

[index] PHP: Save tabsessionid, userid, datecreated, lastactive, phpsessionid into database;

[index] JS: Every second, send tabsessionid to keepalive.php

[keepalive] PHP: Check if another session exists in the last 2 seconds

[keepalive] PHP: If exists -> Return "-1"; else -> return "1";

[keepalive] PHP: Update tabsessionid's last active time.

我尝试了一些解决方案here,但警告了新选项卡,而不是较旧的选项卡似乎在降低延迟/时间方面是棘手的部分。

最佳答案

您应该保留内容的版本,最初为1,每次提交的编辑都会增加。提交的编辑必须包含版本号,该版本号将与当前版本进行比较,如果它们不匹配,则拒绝该编辑。也可以进行ajax调用以询问当前版本,并警告用户他的版本已过时。

sql更新应如下所示:

UPDATE table SET .... WHERE id = :id AND version = :version

然后检查受影响的行,如果它为0,则表示有一个一致的更新。这样您就不会遇到比赛条件。

以上是 js如何检测两个浏览器窗口是否打开同一站点? 的全部内容, 来源链接: www.h5w3.com/122390.html

回到顶部