【问题标题】:Clear PHP session on tab close?在选项卡关闭时清除 PHP 会话?
【发布时间】:2017-12-06 08:27:55
【问题描述】:

每次用户关闭它的标签时,我都会尝试注销。我已经看到了所有类似的问题,但我仍然没有找到任何有效的方法。

这是我所做的:

<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 之类的东西,它并不是真正的链接浏览系统,对吧?也许这就是它在那里工作的原因?

【问题讨论】:

  • 也许这个answer 可以提供帮助

标签: javascript php jquery


【解决方案1】:

您的代码的问题是请求是异步执行的,并随着窗口的关闭而终止。 如果您将 async 参数设置为 false,则 ajax 请求将在选项卡/窗口关闭之前执行。

很遗憾,这并不能解决您的问题,因为每次您要离开页面时都会触发此事件。如果您只是想破解一个解决方案,您可以使用此处提到的方法:https://stackoverflow.com/a/44057659/5173095 - 在服务器端触发超时,如果用户在超时后没有发出另一个请求,则注销用户。

【讨论】:

    【解决方案2】:

    beforeunload 会在您每次使用浏览器卸载当前 html 时触发。即使您单击链接,也会发生这种情况。当您创建一个选项卡时,您还关闭了执行该页面的 js 的环境。我不认为它可以在本地完成。

    【讨论】:

    • 是的,我刚刚更新了我的问题。我添加了一个解释,它会触发注销 ajax,但即使我浏览页面时...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多