我在关闭页面时使用此代码注销用户,但用户也会在点击其他链接(同一网站)时注销:
$( window ).unload(function() {
$.ajax({url:"?logout&leave=yes", async:false})
});
有没有办法区分链接导航和真实页面关闭?
编辑:
我目前正在实施此解决方案,但它缺乏检测页面重新加载
$('a').click(function(){
var url = $(this).attr("href");
window.onbeforeunload = null;
$(window).unbind('beforeunload');
window.location = url;
});
答案 0 :(得分:5)
尝试以下解决方案,希望这有帮助
<script>
$(window).bind('click', function(event) {
if(event.target.href)
$(window).unbind('beforeunload');
});
$(window).bind('beforeunload', function(event) {
$.ajax({url:"?logout&leave=yes", async:false});
});
</script>
或
var logOutFlag = true;
$('a').click(function(){
logOutFlag = false;
});
$(window).bind('beforeunload', function(event) {
if(logOutFlag){
$.ajax({url:"?logout&leave=yes", async:false});
}
});
答案 1 :(得分:4)
这个问题已被多次询问:
javascript detect browser close tab/close browser
How to detect a window close event using javascript or php
Automatic logout if the tab is closed
你可以找到很多其他人。
简短的回答是:你做不到。正如其他答案所说:实际上有许多其他合法案例,用户肯定不想要在关闭标签时注销(在两个标签页中打开相同的网站,书签点击,手动修改网址)在导航栏中......)。
我知道检测用户是否要退出的唯一方法是在页面上放置“退出”按钮。
否则,您应该管理您的sesions的超时机制(例如:在服务器端,在30分钟不活动后删除会话)。
答案 2 :(得分:1)
无法知道用户离开页面时想要去哪里。
而不是在单击时手动取消绑定事件,您可以设置一个标志,并在设置此标志时跳过unload
回调中的AJAX请求。另请注意,$(window).unload()
已弃用,应替换为:$(window).on('unload', function() {})
。
我能想到的唯一解决方案是在页面unload
上设置cookie(或LocalStorage)中的值,并检查是否在页面加载时设置了此值。但是,如果您只想在用户离开您的应用时发送AJAX请求,那么这将无效。
答案 3 :(得分:0)
链接不是唯一的问题,如果用户编辑网址并重新提交或只是刷新页面以查看新内容该怎么办。或者如前所述,如果用户打开了两个或更多窗口,并关闭了一个窗口,是否会注销另一个窗口?