在Django网站上,用户N分钟内未活动后自动注销

32

我正在开发一个网站,需要在用户N分钟内无操作后自动退出登录。使用Django有没有相关的最佳实践?

5个回答

55
请参考会话中间件及其设置。具体来说,有以下两个设置:

SESSION_COOKIE_AGE

默认值:1209600(2周,以秒计)

会话cookie的年龄,以秒为单位。

SESSION_SAVE_EVERY_REQUEST

默认值:False

是否在每个请求中保存会话数据。 如果此值为False(默认值),则只有在修改了会话数据时,即分配或删除其任何字典值时,才会保存会话数据。

通过将低的SESSION_COOKIE_AGE设置并打开SESSION_SAVE_EVERY_REQUEST,可以创建“滑动”过期时间。

4
在django session中间件中设置会话cookie的年龄只是设置了在发送回浏览器的set-cookie头中的到期时间。只有浏览器遵守到期时间才能强制“注销”。
根据您需要空闲注销的原因,您可能不认为浏览器遵守到期时间就足够好。在这种情况下,您需要扩展会话中间件来实现。
例如,您可以在会话引擎中存储一个到期时间,并使用请求更新它。根据您网站的流量性质,您可能希望每X秒钟只写回一次会话对象,以避免过多的数据库写入。

在Django 1.4中似乎并非如此。我从服务器收到的Set-Cookie头看起来像这样:Set-Cookie=csrftoken=...sessionid=365ede0dd7038cc70796f9f724bc21b6; httponly; Path=/它没有过期时间,因此必须在服务器端执行过期。 - Nathan
很好,会话中间件已经得到改进。我不确定我应该怎么处理这个在当时是准确的答案。 - MattH
我认为可以将你的答案保留原样,因为在撰写时它是正确的。 - Nathan
@Nathan:啊,我又多读了一些资料,Django 1.4 中有一个使用 cookie 的新会话后端。然而,在你的情况下,没有过期时间的 cookie 是一个会话 Cookie,应该在浏览器关闭时被删除。在这种情况下,Django 并不一定执行任何形式的“空闲注销”。 - MattH

4
"settings.py" 中,对于会话过期时间,请设置默认为1209600秒(2周)SESSION_COOKIE_AGE,对于非活动注销,请将默认值为"False"SESSION_SAVE_EVERY_REQUEST设置为"True",如下所示:
# "settings.py"

SESSION_COOKIE_AGE = 180 # 3 minutes. "1209600(2 weeks)" by default 

SESSION_SAVE_EVERY_REQUEST = True # "False" by default

0

0

尝试安装django-auto-logout。您可以控制宕机时间

AUTO_LOGOUT = {'IDLE_TIME': 600} #在10分钟的宕机后注销

访问https://morioh.com/p/eb3e09781dbf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接