【问题标题】:How to kill a session on browser close in django如何在 django 中关闭浏览器上的会话
【发布时间】:2013-12-08 08:39:40
【问题描述】:

我正在为我的应用程序使用 Python-Django。我想在用户关闭浏览器时终止会话,并希望将会话终止或浏览器关闭时间存储在数据库中。
当用户通过设置从浏览器中删除会话 cookie 来关闭浏览器时,Django 会话提供了使会话过期的机制

 SESSION_EXPIRE_AT_BROWSER_CLOSE=True

在 settings.py 文件中。它从用户浏览器中删除会话 cookie。我可以在后端或 django 中获得此事件吗?或者我如何通过 ajax 向 Django 服务器传递一条消息,表明浏览器已关闭并且会话 cookie 已被删除。告诉我是否可以通过 django 或如何使用 javascript 来完成

【问题讨论】:

    标签: javascript jquery django cookies django-views


    【解决方案1】:

    为了在卸载之前进行 ajax 调用,恐怕你会像事件所期望的那样向用户显示一个烦人的警报框:

    Date.prototype.timeNow = function(){
         return ((this.getHours() < 10)?"0":"") + this.getHours() +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() +":"+ ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
    };
    
    $(window).bind("beforeunload", function (e) {
        var timeNow = new Date().timeNow(); 
        $.post( "api/closingTime", { "closingTime": timeNow } );
        return "Thanks for your visit";
    });   
    

    这也有点问题,好像用户决定点击停留在页面上发布请求仍然继续

    【讨论】:

    • 谢谢 XGreen,SESSION_EXPIRE_AT_BROWSER_CLOSE=True。在 Django 中使用此方法,cookie 在关闭时会自动从浏览器中删除。我只是想向 Django 服务器发送一个 ajax 请求,以便我获得请求到来的当前时间并将该时间存储到数据库。
    • Thanx Xgreen,我没试过你的方法,因为我试过这个 window.onbeforeunload = function() { alert("hey ur leave this site") return "Hey, you're leave the网站。再见!"; };但即使我点击一个链接,我每次都会提醒我或调用该方法。表示当一个 url 改变这个方法被调用。
    【解决方案2】:

    你可以使用这样的信号

      from django.contrib.auth.signals import user_logged_out
    
    
      def do_stuff(sender, user, request, **kwargs):
          whatever...
    
      user_logged_out.connect(do_stuff)
    

    请参阅 django 文档:https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signals 和此处http://docs.djangoproject.com/en/dev/topics/signals/

    【讨论】:

    • 此信号仅在用户注销时有效。但如果他不注销就关闭浏览器则不会
    猜你喜欢
    • 2018-04-27
    • 1970-01-01
    • 2013-08-11
    • 2018-04-15
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多