如果用户移动另一个站点或浏览器关闭后Django关闭会话

时间:2016-10-28 19:45:29

标签: django

如果用户从我的网站移动到另一个网站或关闭浏览器,我该如何在Django中关闭会话。

1 个答案:

答案 0 :(得分:1)

从问题和评论中,似乎您希望在用户退出您的网站时“关闭”会话,而无需JS的任何帮助。答案取决于你如何定义“关闭”。

问题的根源是HTTP是无状态的。进入服务器的每个请求都是完全独立的请求,与任何其他请求没有任何关系,这意味着不能有任何状态。由于状态非常有用,我们通过使用会话来破解HTTP以添加状态。这个想法是浏览器向存储在服务器上的某个状态发送一些标识符,允许服务器检索该状态,从而为请求提供一些上下文。关键是浏览器正在发送该数据。换句话说,如果浏览器在某个时刻停止发送请求(例如用户关闭选项卡),服务器将永远不会知道。因此,如果您将“关闭”会话定义为从服务器中删除会话,那么没有一些JS帮助就无法做到这一点。

但是,如果你想要实现的只是在退出网站时将用户注销,那么可以使用SESSION_EXPIRE_AT_BROWSER_CLOSE设置在Django中部分完成。 Here是关于此问题的其他文档。这里的想法是当Django将会话cookie发送回浏览器时,它会向其指示会话cookie在浏览器关闭时应该到期。在这种情况下,当浏览器关闭时,浏览器本身将使会话无效,因此用户将被迫在下次访问时创建新会话。这是部分解决方案,因为会话仍然存储在服务器上,我相信只有在浏览器完全关闭时才能工作(我不认为关闭选项卡有效但不确定)。为了缓解服务器累积旧会话的问题,Django提供了一个管理命令clearsessions,您应该定期运行该命令。