我正在尝试检测用户是否在一个选项卡中打开了我的网站,然后在另一个选项卡中打开它。这应该会在新打开的选项卡上向用户显示警告。
现在我每秒钟都会向服务器发送一个“保持活动状态”的ajax调用。然后,这会使用唯一 ID 在数据库中记录“上次活动”时间。加载新页面时,它会检查该用户(由用户 ID 标识)是否在最后 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.
我在这里尝试了一些解决方案,但警告较新的选项卡,而不是较旧的选项卡似乎是降低延迟/时间方面的棘手部分。