检测两个浏览器窗口是否对同一站点开放

Jam*_*lor 10 javascript php ajax jquery

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

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

这感觉非常低效.当用户刷新页面时,它也不能很好地执行.(只需不到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.
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*rek 3

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

sql 更新应该如下所示:

UPDATE table SET .... WHERE id = :id AND version = :version
Run Code Online (Sandbox Code Playgroud)

然后检查受影响的行,如果为0,则有并发更新。这样你就不会遇到竞争条件。