更改Django Admin不活动超时设置
怎么才能增加Django后台的闲置超时时间?默认的时间似乎非常短,几分钟就会超时,这让人很烦。需要注意的是,我知道有个叫SESSION_COOKIE_AGE的设置,但我不想这个改动影响到公众网站的超时时间。
2 个回答
一种实现不同会话超时设置的方法是运行你网站的两个实例。一个是只有你能访问的(比如在localhost:8080上运行),这个实例有管理员页面,并且有一个特定的admin_settings.py文件;另一个是你公开可用的普通网站。
根据你的服务器设置,这个过程在Apache和虚拟主机(VirtualHosts)中很简单(我就不详细讲解了,因为你的设置可能不同)。
然后你可以使用SSH隧道来访问在服务器本地运行的管理员网站。
如果你真的不想让管理员网站一直运行,另一种选择是使用manage.py runserver来运行你网站的一个实例,并传入你的管理员设置(因为理想情况下只有你会访问这个,runserver应该能处理这个流量):
$ python manage.py runserver --settings=admin_settings localhost:8080
然后通过SSH隧道访问它。如果你想避免使用SSH隧道,也可以考虑公开运行它,但要通过stunnel,具体可以参考这里
所以,这里有两个可能的原因。第一个是你的会话在到期时间之前就失效了。SESSION_COOKIE_AGE 默认是两周。如果你的会话没有持续那么久,检查一下你的后端是否在使用缓存,或者缓存是否满了(这样会导致会话在到期之前就被挤掉)。
你可以通过设置 settings.SESSION_SAVE_EVERY_REQUEST 来强制每次请求都刷新会话,但这样在访问量大的网站上可能会影响性能。
另一个可能性是你故意把 SESSION_COOKIE_AGE 设置得很小,但现在想让管理员的会话持续更久。默认情况下,无法将管理员的会话超时和普通用户的超时分开。
你也可以写一个中间件,从请求中提取用户信息,检查用户是否是管理员,如果是的话,调用 request.session.set_expiry() 来手动延长会话的到期时间。