【问题标题】:Logout when the user close the tab用户关闭选项卡时注销
【发布时间】:2016-03-29 11:58:53
【问题描述】:

在我的 Django 站点上,我想在关闭选项卡或浏览器时自动退出站点。我的意思是当我通过关闭选项卡而不是使用注销按钮来关闭站点时,再次输入 URL 后,我希望看到用户已经从站点注销以强制用户再次输入用户名和密码。

有没有办法处理关闭 JQuery 中的选项卡?

提前谢谢你。

编辑:onunload 和 onbeforeunload 事件导致在重新加载页面时注销用户。

【问题讨论】:

  • 这应该有助于stackoverflow.com/a/13916847/2968762。您可以使用store.js 代替localStorage
  • 谢谢 :) 我想我需要执行这些步骤。另外,我期望并假设有一个特殊事件可以处理“关闭选项卡或浏览器”。 @Abhi

标签: javascript jquery


【解决方案1】:

您可以使用 Javascript onunload & onbeforeunload 事件。在这些事件中销毁 Django 的会话 cookie。

当您通过链接或浏览器的后退按钮离开网站时,也会触发这些事件,因此请务必小心,如果这确实是您想要的,请三思。

【讨论】:

  • 如果用户重新加载页面会发生什么?如果用户一段时间不活动,我认为最好设置会话到期。
  • 感谢您的回答,但是当我重新加载页面或转到新页面(重新加载页面)时,它也会注销用户。
【解决方案2】:

将您的注销代码添加到 onunload 事件。

window.onunload = function () {
    //logout code here...
}

在 JQuery 中,您可以使用 .unload() 函数。请记住,您没有太多时间,因此您可以发送 Ajax 请求,但结果可能无法到达客户端。

另一个技巧是打开一个小的新窗口并在那里处理注销。

window.open("logout url","log out","height=10,width=10,location=no,menubar=no,status=no,titlebar=no,toolbar=no",true);

如果你想禁止关闭窗口(或者至少警告用户),你可以使用这个代码:

window.onbeforeunload = function(event) {
    //if you return anything but null, it will warn the user.
    //optionally you can return a string which most browsers show to the user as the warning message.
    return true;
}

另一个技巧是每隔几秒就对客户端进行一次 ping 操作。如果没有回复,则假定用户已关闭窗口、浏览器已崩溃或存在网络问题导致聊天会话结束。在客户端,如果你没有收到这个 ping 包,你可以认为网络连接或服务器有问题,你可以显示注销警告(并且可以选择让用户重新登录)。

【讨论】:

    【解决方案3】:

    我刚碰到这个。在您的 Django settings.py 文件中,您可以添加标志:

    SESSION_EXPIRE_AT_BROWSER_CLOSE = 真

    这将在浏览器关闭时注销用户。 请注意,如果还有其他选项卡或窗口仍然打开,用户将保持登录状态(浏览器必须完全关闭)。

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多