更改Django管理员不活动超时

时间:2011-03-29 16:04:00

标签: python django django-admin security

如何增加Django管理员的不活动超时?默认似乎非常短,并且在几分钟之后似乎超时,这非常烦人。请注意,我知道SESSION_COOKIE_AGE,但我不希望此更改影响公共网站的超时。

2 个答案:

答案 0 :(得分:1)

所以,有两个可能的原因。首先是你在到期前失去了会话。 SESSION_COOKIE_AGE默认为2周。如果您的会话持续时间不长,请检查以确保您的后端没有使用缓存,或者缓存未满(从而在会话之前突破会话)。

您可以使用settings.SESSION_SAVE_EVERY_REQUEST强制在每个请求上刷新会话,但这可能会在繁忙的站点上出现性能问题。

另一种可能性是你已经将SESSION_COOKIE_AGE设置为有目的的小东西,但你现在希望管理cookie持续更长时间。没有办法将管理会话超时与正常用户超时分开,至少开箱即用。

您还可以编写一个中间件,将用户拉出请求,检查user.is_staff,如果是,请调用request.session.set_expiry()手动推送到期时间。

答案 1 :(得分:0)

完成不同会话超时设置的一种可能方法是运行站点的两个实例。只有您可以访问的(例如在localhost:8080上运行),其中管理页面可用,并且具有特定的admin_settings.py文件,以及可公开访问的常规站点。

根据您的服务器设置,这可以通过Apache和VirtualHosts轻松完成(我不会详细介绍,因为您可能有不同的设置)。

然后,您可以使用SSH隧道访问在服务器的localhost上运行的管理站点。

另一种选择,如果你真的不希望你的管理站点一直在运行,那就是使用manage.py runserver来运行你站点的一个实例,然后传入你的管理设置(因为理想情况下你只会这样做)要访问它,runserver应该能够处理流量):

$ python manage.py runserver --settings=admin_settings localhost:8080

然后通过SSH隧道访问它。如果您想通过此方法避免使用SSH隧道,那么您可以考虑公开运行它,但是通过概述here

的stunnel