在Django网站上用户N分钟不活动后自动注销
我正在做一个网站,需要在用户 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
打开,就可以实现“滑动”过期的效果。