我写了一个脚本(php),它利用会话,以便在浏览器重新启动后结束,还编写了"注销"功能的脚本(包括销毁会话和从浏览器中删除cookie)。
这是我的问题:
当用户自愿注销时,我的脚本会节省时间。但我无法控制浏览器重新启动或关闭的情况。
我也可以用什么方法来处理这些案件吗?谢谢
如果浏览器没有请求,服务器端(PHP)不会注意到。
但是,如果您更新数据库中的最后一个活动时间戳,您就会知道最后一次活动是什么时候。随着会话在一段时间后被销毁,该用户的最后一个活动将保留在数据库中,直到下次登录。
您可以让用户页面以合理的间隔使用ajax登录服务器。(5分钟?)然后每5分钟在服务器上运行一次作业,以检查没有登录那么久的用户。您可以假设他们关闭窗口或失去连接的时间是在上次签入和当前时间之间,然后销毁会话。
我会将AJAX事件绑定到卸载Javascript事件。
$(window).unload(function() {
$.ajax({
url: 'someLogoutRequest.php'
});
});
PHP会话通常会在浏览器关闭时死亡(假设您的cookie和会话不会混淆)。但是,您可以添加一个额外的会话来存储时间戳,该时间戳之后的任何内容都是按时间计的。无效,并清除会话。您通常会在用户导航时续订此时间戳,这样它就不会在导航中途超时。尽管我仍然不百分之百清楚你想做什么以及为什么。因此,我的答案可能是一个无声的概念,以满足需求。jjs9543有一个不错的建议,尽管如果在用户浏览器上禁用Javascript,这个建议会失败(我无法想象这会像几年前那样常见,但同样值得一提)。