Django会话在浏览器关闭时或在一段时间后到期

nuc*_*edd 7 django session session-cookies

Django文档说明:

您可以控制会话框架是使用浏览器长度会话还是使用SESSION_EXPIRE_AT_BROWSER_CLOSE设置的持久会话.

如果SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True,Django将使用浏览器长度的cookie - 一旦用户关闭其浏览器就会过期的cookie.如果您希望人们每次打开浏览器时都必须登录,请使用此选项.

此设置是全局默认设置,可以通过显式调用request.session的set_expiry()方法在每个会话级别覆盖,如上所述在视图中使用会话.

因此,当我在设置文件中将SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True时,这确实就是它的作用.这很好,因为我希望用户的会话在浏览器关闭时到期.但是,我还希望用户的会话在15分钟不活动后过期.如果我使用上面提到的set_expiry(),则会覆盖SESSION_EXPIRE_AT_BROWSER_CLOSE,因此如果用户关闭浏览器,然后在到期之前重新打开浏览器,则会话仍然有效.不是我想要的.

此外,set_expiry()的文档表示会话在设置的不活动时间之后到期.这实际上不是真的.无论我的用户是否在网站上点击,它都会过期.

总而言之,我想做的是:

  1. 我的会话配置为如果用户关闭浏览器,会话将自动过期.
  2. 设置使用activity更新的会话到期长度,即如果用户在站点上执行了其他操作,则重置过期.

思考/建议吗?

Amy*_*yth 4

正如 Jiaaro 在这个答案中建议的那样,您可以SESSION_EXPIRE_AT_BROWSER_CLOSE在每个请求的会话上使用和设置时间戳,并添加自定义Middleware来处理不活动状态。