如何在django上关闭浏览器关闭会话

时间:2013-11-23 12:24:29

标签: javascript jquery django cookies django-views

我在我的应用程序中使用Python-Django。我想在用户关闭浏览器并希望将该会话终止或浏览器关闭时间存储在数据库中时终止会话 当用户通过设置

从浏览器中删除会话cookie来关闭浏览器时,Django会话提供使会话到期的机制
 SESSION_EXPIRE_AT_BROWSER_CLOSE=True
在settings.py文件中

。它从用户浏览器中删除会话cookie。我可以在后端或django中获得此活动吗?或者如何通过ajax将消息传递给Django服务器,浏览器已关闭且会话cookie已被删除。告诉我django是否有可能或者如何使用javascript

完成

2 个答案:

答案 0 :(得分: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";
});   

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

答案 1 :(得分:0)

你可以使用这样的信号

  from django.contrib.auth.signals import user_logged_out


  def do_stuff(sender, user, request, **kwargs):
      whatever...

  user_logged_out.connect(do_stuff)

请参阅django docs:https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signalshttp://docs.djangoproject.com/en/dev/topics/signals/