检测Web应用程序中同一会话的多个选项卡或窗口

Nik*_*071 5 javascript php jquery

我是JavaScript和PHP的新手,所以我有一个问题,如果有一种方法可以在浏览器的网站上检测同一会话的多个选项卡或窗口.在我正在制作的网站上,当用户登录时,布尔(0-1)变量存储在数据库中的用户表中,该变量显示该用户是否已登录.在某人登录并关闭标签或浏览器窗口后,数据库再次更新它更改显示用户是否登录的变量.我这样做的方法是只调用脚本下面

$(window).bind("beforeunload",function(){
 $.ajax({ 
    url: "logout.php", 
    async: false
    });
})
Run Code Online (Sandbox Code Playgroud)

如果用户关闭窗口或选项卡,logout.php将更新数据库.我的问题是,如果有人使用同一网站的同一会话打开多个选项卡,并且只关闭其中一个会话将保留,而数据库将更新该用户不再被记录.

编辑:我不想注销所有打开的标签,我只是不想保留用户仍然在线的数据库,直到他关闭他的会话的所有标签窗口或点击退出按钮.

DDe*_*gro 7

这来自之前的堆栈溢出帖子:

if (+Cookies.get('tabs') > 0)
    alert('Already open!');
else
    Cookies.set('tabs', 0);

Cookies.set('tabs', +Cookies.get('tabs') + 1);

window.onunload = function () {
    Cookies.set('tabs', +Cookies.get('tabs') - 1);
};
Run Code Online (Sandbox Code Playgroud)

URL: 如何知道浏览器选项卡是否已使用Javascript打开?

这应该对你有用!

*这不是我的代码,只是传递信息!

  • 这假设“window.onunload”被调用,但可以想象它可能不会被调用;例如,如果用户的计算机崩溃了。另外,根据实现情况,可能存在竞争条件,例如用户打开两个选项卡。现代选项卡间通信:https://blog.arnellebalane.com/sending-data-across- Different-browser-tabs-6225daac93ec 或服务器端代码的心跳可能需要一个强大的解决方案。 (3认同)