我每次用户关闭其选项卡时都在注销。我已经看到了所有类似的问题,但是我仍然没有找到任何可行的问题。
这是我所做的:
<script type="text/javascript">
$(document).ready(function() {
$(window).bind("beforeunload", function() {
confirm("Do you really want to logout?") && $.ajax({
type: "GET",
url: "/admin/account/logout"
})
})
});
</script>
我尝试过没有confirm
,但它仍然无法使用。我绝对确定它可以完成,因为我的银行的网站具有相同的功能。
编辑:没有confirm
,它确实会启动注销Ajax,但即使我浏览页面。这使我想起,我的银行的网站使用诸如Angularjs之类的东西,而Angularjs并不是真正的链接浏览系统,对吗?也许这就是为什么它在那里工作?
您的代码问题是该请求是异步执行的,并通过窗口的关闭而终止。如果将async
Parenter设置为False,则在关闭选项卡/窗口之前将执行AJAX请求。
不幸的是,这无法解决您的问题,因为每次您要离开页面时,此事件都会发射。如果您只是想破解解决方案,则可以使用此处提到的方法:https://stackoverflow.com/a/a/444057659/5173095-触发服务器端的超时并在用户中注销用户,如果他不提出另一个请求超时之后。
每次您说浏览器卸载当前HTML时,beforeunload
都会触发。即使您单击链接,也会发生这种情况。当您选择一个选项卡时,您还可以关闭该页面JS执行的环境。我认为它不能本地进行。