9

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. 设置随活动更新的会话到期长度,即如果用户在站点上执行其他操作,则重置到期。

想法/建议?

4

5 回答 5

4

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

于 2013-01-03T20:25:48.553 回答
0

来自文档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 应用程序时注意这一点。

于 2015-10-13T06:07:00.143 回答
0

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

此要求通过将SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True来实现。

参考

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

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

参考

你应该在你的setting/__init__.py

于 2018-07-03T10:54:14.240 回答
0

Search engine cache make sure then the session will be closed when TOGETHER with SESSION_EXPIRE_AT_BROWSER_CLOSE = TRUE

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
于 2021-03-09T18:59:58.587 回答
0

By default, SESSION_EXPIRE_AT_BROWSER_CLOSE is set to False, which means session cookies will be stored in users’ browsers for as long as SESSION_COOKIE_AGE. Use this if you don’t want people to have to log in every time they open a browser.

If SESSION_EXPIRE_AT_BROWSER_CLOSE is set to True, Django will use browser-length cookies – cookies that expire as soon as the user closes their browser. Use this if you want people to have to log in every time they open a browser.

于 2021-09-28T12:55:29.647 回答