4

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

我们想跟踪用户保持登录的时间。注册成功后,登录时间将写入数据库。注册不是永久的,它只是为了单次会话的目的,用于获取用户的电子邮件。

有几种情况可能:

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

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

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

想法,批评者,评论?

4

1 回答 1

6

在 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 不时 ping 服务器。仅当用户在浏览器中打开页面并且在每个 ping 服务器上都应该更新用户最后一次看到的在线值时,才会发生这种情况。

当用户关闭浏览器会话结束。下次用户登录服务器时,可以计算他最后一次访问的持续时间,如最后一次在线看到的-最后一次登录时间

不使用任何 javascript 的更简单的解决方案:可以使用简单的自定义中间件根据每个用户请求更新最后一次在线访问。

于 2012-10-07T11:39:33.403 回答