繁体   English   中英

在Django中关闭浏览器检测用户注销

[英]Detecting user logout on browser close in Django

我们有一个用于某些数值计算的网络服务。 它具有注册模式,在该模式下,用户必须注册才能通过邮件发送其结果。

我们想跟踪用户保持登录状态的时间。 成功注册后,登录时间将写入数据库。 注册不是永久性的,仅用于单个会话,用于获取用户电子邮件。

可能有几种情况:

用户通常通过注销按钮注销。 最简单的解决方案。 在数据库中写入时间并注销,然后删除会话。

用户按会话到期时间注销。 我打算使用一个脚本来检查所有没有设置注销时间的数据库条目,并且如果当前时间-登录时间>过期时间将注销时间写为数据库中的登录时间+过期时间

用户通过浏览器关闭注销。 这些会话的get_expire_at_browser_close()设置为True。 但是我不知道服务器如何检测浏览器关闭。

想法,评论家,评论?

在django会话中间件中,如果我们希望SESSION_EXPIRE_AT_BROWSER_CLOSE,则这些行控制会话的到期时间:

if settings.SESSION_EXPIRE_AT_BROWSER_CLOSE:
    max_age = None
    expires = None

根据此页面 ,服务器不必检测任何内容,因为应在客户端删除没有max_age或expires设置的cookie:

通过设置这两个参数,cookie将一直保留到时间用完为止;否则(如果您未设置任何一个),cookie将一直持续到关闭浏览器为止(“会话cookie”)。

编辑:

跟踪用户在线时间的一种方法是使用JavaScript,该JavaScript会不时地ping服务器。 只要用户在浏览器中打开了页面,并且在每个ping服务器上都应该为该用户更新最后一次看到的在线值,它就会发生。

用户关闭时,浏览器会话结束。 下次用户登录服务器时,可以将其上次访问的持续时间计算为上次在线访问- 上次登录时间

无需使用任何JavaScript即可实现更简单的解决方案:可以使用简单的自定义中间件针对每个用户请求更新上次在线查看的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM