首页 文章

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

提问于
浏览
7

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()的文档说明会话在 inactivity 的设定时间后过期 . 这实际上不是真的 . 无论我的用户是否在网站上点击,它都会过期 .

总而言之,我想做的是:

  • 我的会话已配置为如果用户关闭浏览器,会话将自动过期 .

  • 设置使用activity更新的会话到期长度,即如果用户在站点上执行了其他操作,则重置过期 .

思考/建议吗?

3 回答

  • 1

    当用户关闭浏览器时,会话将过期:

    通过将SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True来实现此要求 . 参考

    会话在一段时间不活动后过期:

    SESSION_COOKIE_AGE是会话cookie的年龄,以秒为单位 . 默认值:1209600(2周,以秒为单位)参考

    你应该在 setting/__init__.py 上设置这些选项

  • 0

    来自docs https://docs.djangoproject.com/en/1.8/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions

    某些浏览器(例如Chrome)提供的设置允许用户在关闭并重新打开浏览器后继续浏览会话 . 在某些情况下,这可能会干扰SESSION_EXPIRE_AT_BROWSER_CLOSE设置,并阻止会话在浏览器关闭时到期 . 在测试启用了SESSION_EXPIRE_AT_BROWSER_CLOSE设置的Django应用程序时请注意这一点 .

  • 0

    正如Jiaaro在this answer中建议的那样,您可以使用 SESSION_EXPIRE_AT_BROWSER_CLOSE 并在每次请求时为会话设置时间戳,并添加自定义 Middleware 来处理不活动 .

相关问题