php – 关闭窗口关闭会话?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 关闭窗口关闭会话?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我在PHP中创建了一个登录系统,具有注销功能等.但我需要在窗口关闭时销毁会话.这需要“即时”或尽可能快地将用户状态更改为脱机.我真的不想在会话上设置时间,因为这对于必须一直登录用户来说很烦人.

欢迎任何建议,谢谢. =)

认情况下,浏览器关闭时会删除 PHP发送的所有会话cookie.但据我所知,您希望在其他浏览器上显示通知.这有点难,不太好.您必须使用 window.onclose事件处理程序并向服务器发出Ajax请求(我认为应该同步请求)以通知窗口关闭.同步话不太好……

另一方面,其他浏览器必须使用其他Ajax请求拉取服务器以查看某个用户何时注销.

所有这些Ajax请求都是一个丑陋的解决方案.

更新:

正如Thorarin和Jonathan Fingland所说的那样,多个窗口可能存在问题(不是标签,因为window.onclose在窗口上发射而不是标签),但我相信这个问题也有解决方案.如果第一个窗口设置cookie number_of_windows = 1,对于每个打开的窗口递增,则在窗口关闭时,仅当number_of_windows等于1时才会触发Ajax请求,否则它只会减少number_of_windows.

更新2:

事实上,上述解决方案会出现多个打开标签的麻烦.我正在考虑如何减轻这种情况.

更新3:

好的,我想出了某种解决方案,但它不能在IE6中工作,不知道其他IE版本.下面的代码片段记录了打开的窗口和标签数量(除了IE之间没有在Windows之间实时更新document.cookie,但我相信它可以通过一些IE专有功能解决).然后在每个页面卸载,这意味着甚至在同一个网站上从一个页面导航到另一个页面,脚本检查以查看有多少打开的窗口.如果它是唯一打开的窗口/选项卡,则它会发出Ajax请求.这是解决方案的第一部分.现在,第二部分.

在服务器端,Ajax调用请求的脚本应更新数据库中的某些条目,表示用户可能已关闭页面.您如何判断她是否只是访问您网站上的新页面?很简单,在每个页面访问时,您检查数据库中该会话的“可能已注销”值,如果您将它们标记为false(用户登录),则用户将继续在数据库中注销(true旗).

它很乱,但它是我想到的单一解决方案,因为我无法确定JavaScript中的页面重新加载等.另外,我没有做过大量的测试,更多的是一个想法.无论如何,我不推荐这个解决方案.对每个更改的页面的Ajax请求都是过度的,并且在服务器上的命中率实际上是两倍,而不计算其他浏览器完成的轮询.

这是片段.顺便说一下,bakery.js是document.cookie的一个小包装器.你可能会发现its source here on github.

<!DOCTYPE htML>

<html>
<head>
<Meta charset="UTF-8">
<tITle></title>
<script type="text/javascript" src="bakery.js"></script>
<script type="text/javascript">
VAR logout = function() {
    var xhr = new XMLHttPRequest;
    xhr.open("GET","logout.PHP",false);
    xhr.send(null);
};

window.onload = function() {
    var winNumber = parseint(IGS.Bakery.getCookie("winNumber"),10) || 0;
    IGS.Bakery.setCookie("winNumber",winNumber + 1);
};

window.onunload = function() {
    var winNumber = parseInt(IGS.Bakery.getCookie("winNumber"),winNumber - 1);

    if (winNumber === 1) {
        logout();
    }
};

var showCookies = function() {
    alert(IGS.Bakery.getCookie("winNumber"));
};
</script>
</head>
<body>

<a href="#" onclick="showCookies();">show</a>

</body>
</html>

忘了提. window.onclose不是跨浏览器.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 关闭窗口关闭会话?全部内容,希望文章能够帮你解决php – 关闭窗口关闭会话?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。