可能重复:
How can I destroy sessions if user closes the browser window or navigates away from page in php?
基本上我想通过更新我的MySQL数据库将我的用户设置为“离线”,并可能在他们关闭浏览器或页面时结束他们的会话。
我见过这样做的网站。
任何人都可以解释它的完成情况并发布一个例子吗?
先谢谢你。
答案 0 :(得分:3)
当页面关闭或导航离开时,你可以做某事的唯一方法是将事件处理程序附加到卸载事件,正如Rocket建议的那样。但是,您不应该依赖此事件来触发,因为很多事情可能会阻止它。浏览器可能会停止它以便将其资源集中在其他任务上,用户可能会松开它的连接,浏览器可能会被终止等等。
跟踪用户和会话的最可靠方法是让他们以给定的时间间隔向服务器发送keepAlive消息。然后你会知道用户在给定的时间戳和keepAlive消息的间隔之间的某个时间离开。
在服务器上,您可以遍历尚未保留一段时间的会话并执行您需要的任何操作。
但是,如果您只需要创建一些很酷的“注销”效果,则不需要这种方法。
答案 1 :(得分:0)
当用户离开页面/关闭标签页时,您可以使用window.onunload
触发AJAX调用。
window.onunload = function(){
// AJAX call to mark user "offline"
}
编辑:我建议在点击链接时设置变量,这样只有在用户离开页面时才会运行。
使用jQuery,可以这样做:
$('a').click(function(){ // Run for all links
$('body').data('linkClicked', true); // Set global variable
});
$(window).unload(function(){ // jQuery version of window.onunload
if(!$('body').data('linkClicked')){ // Check global variable
$.ajax({
url: 'url',
data: {some: data},
async: false // this locks the browser, but it may be needed to make
// sure the ajax call runs before the tab is closed
});
}
});
答案 2 :(得分:0)
我会使用jQuery来执行此任务..类似这样并使用如上所述的window.onunload:
$.ajax({
type: 'POST',
url: url,
data: data,
success: success,
dataType: dataType
});