我试图让...“某事”知道用户是关闭浏览器还是在其他情况下是空闲的。我需要使用令牌注销用户。
我正在使用Symfony2.4并且实际注销包括处理程序,因为我需要知道该人是否已登录到另一台计算机。我不能简单地使用会话到期,因为该处理程序将不会执行,并且应用程序仍会将用户显示为已记录。
我正在使用此代码并且工作得非常好!!
<script>
var unloaded = false;
$(window).on('beforeunload', unload);
$(window).on('unload', unload);
function unload(){
if(!unloaded){
$('body').css('cursor','wait');
$.ajax({
type: 'get',
async: false,
url: "{{ logout_url('main') }}",
success:function(){
unloaded = true;
$('body').css('cursor','default');
},
timeout: 50
});
}
}
</script>
与此相关的是,当用户尝试访问网站中的任何链接时,此代码将执行,并且需要再次登录。
我可以通过简单地转到另一个链接来避免此代码运行,或者我可以做些什么来获得类似的结果?
这更像是一个Javascript问题,但很好。
如何用javascript包装所有外部链接,设置一个禁用unload()
功能的标志?但这并不是很聪明,但应该有效。
类似的东西(未测试):
$('a').click(function(){
// set the flag
myFlag = true;
return true;
}):
并在卸载中:
function unload(){
if (myFlag) {
myFlag = false
return
}
// the rest here
}
编辑:
如果要在页面卸载时发送请求,最好使用navigator.sendBeacon(),因为当用户代理有机会将数据异步传输到Web服务器时,不会延迟卸载或影响性能下一个导航。见https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon