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

32 投票
5 回答
22813 浏览
提问于 2025-04-15 20:59

我正在做一个网站,需要在用户 N 分钟没有操作后自动把他们登出。请问在使用 Django 的时候,有什么好的做法吗?

5 个回答

4

在Django的会话中间件中设置会话cookie的有效期,其实就是在返回给浏览器的set-cookie头里设置一个过期时间。只有当浏览器遵守这个过期时间时,才会真正“登出”。

如果你需要自动登出的原因比较特殊,可能会觉得浏览器遵守这个过期时间不够可靠。在这种情况下,你就需要对会话中间件进行一些扩展。

举个例子,你可以在会话引擎中存储一个过期时间,并在每次请求时更新它。根据你网站的访问情况,你可能希望每隔X秒才更新一次会话对象,以避免频繁地写入数据库。

6

"settings.py"文件中,关于会话过期时间,你可以设置SESSION_COOKIE_AGE,默认值是1209600秒(2周)。如果你想要设置不活跃时自动登出,可以把SESSION_SAVE_EVERY_REQUEST的值改为"True",默认是"False",具体设置如下:

# "settings.py"

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

SESSION_SAVE_EVERY_REQUEST = True # "False" by default
56

看看这个会话中间件和它的设置,特别是这两个:

SESSION_COOKIE_AGE

默认值:1209600(2周,单位是秒)

会话 cookie 的有效期,单位是秒。

SESSION_SAVE_EVERY_REQUEST

默认值:False

是否在每次请求时都保存会话数据。如果这个设置是 False(默认值),那么只有当会话数据被修改时,才会保存数据——也就是说,只有当字典中的某些值被赋值或删除时,才会保存。

如果把 SESSION_COOKIE_AGE 设置得小一点,并且把 SESSION_SAVE_EVERY_REQUEST 打开,就可以实现“滑动”过期的效果。

撰写回答