Django4.0 使用会话-配置
2022-03-16 18:01 更新
一些可以用来控制会话行为的 Django settings :
-
SESSION_CACHE_ALIAS
:默认为default
如果你使用的是 基于缓存的会话存储,这将选择要使用的缓存。 -
SESSION_COOKIE_AGE
:默认为 1209600 (2 周,以秒为单位)。会话 cookie 的寿命,以秒为单位。 -
SESSION_COOKIE_DOMAIN
:默认为 None
用于会话 cookie 的域。将其设置为一个字符串,如 "example.com",用于跨域 cookie,或使用 None
用于标准域 cookie。要使用带有 CSRF_USE_SESSIONS
的跨域 cookie,你必须包括一个前导点(例如 ".example.com"),以适应 CSRF
中间件的引用检查。在生产型网站上更新此配置时要谨慎。如果你更新此配置,在以前使用标准域 cookie 的网站上启用跨域 cookie,现有用户 cookie 将被设置为旧域。这可能导致他们无法登录,只要这些 cookie 持续存在。这个配置也会影响到 django.contrib.messages
所设置的 cookies。 -
SESSION_COOKIE_HTTPONLY
:默认为 True
是否对会话 cookie 使用 HttpOnly
标志。如果设置为 True,客户端的 JavaScript 将无法访问会话 cookie。HttpOnly
是包含在 Set-Cookie HTTP
响应头中的一个标志。它是 RFC 6265#section-4.1.2.6 标准中 Cookie 的一部分,可以作为一种有用的方式来降低客户端脚本访问受保护 Cookie 数据的风险。这使得攻击者将跨站脚本漏洞升级为完全劫持用户的会话变得不那么简单。关闭这个功能的理由不多。你的代码不应该从 JavaScript 中读取会话 cookies。 -
SESSION_COOKIE_NAME
:默认为 sessionid
用于会话的 cookie 的名称。这可以是任何你想要的(只要它与你的应用程序中的其他 cookie 名称不同)。 -
SESSION_COOKIE_PATH
:默认为 /
会话 cookie 上设置的路径。这个路径应该与你的 Django 安装的 URL 路径相匹配,或者是该路径的父路径。如果你有多个 Django 实例在同一个主机名下运行,这个功能很有用。他们可以使用不同的 cookie 路径,而且每个实例只能看到自己的会话 cookie。 -
SESSION_COOKIE_SAMESITE
:默认为 Lax
会话 cookie 上的 SameSite 标志的值。这个标志可以防止 cookie 在跨站请求中被发送,从而防止 CSRF 攻击,使一些窃取会话 cookie 的方法变得不可能。
该配置的可能值为:
Strict
:防止浏览器在所有跨站点浏览的情况下向目标站点发送 cookie,即使在使用常规链接时也是如此。例如,对于类似 GitHub 的网站来说,这意味着如果登录的用户通过企业论坛或电子邮件链接到 GitHub 的私人项目,GitHub 将不会收到会话 cookie,用户将无法访问该项目。然而,银行网站很可能不允许从外部网站链接任何交易页面,因此Strict
标志将是合适的。
Lax
(默认):为希望在用户从外部链接到达后保持用户登录会话的网站提供安全和可用性之间的平衡。在 GitHub 的场景下,当跟随外部网站的常规链接时,会话 cookie 将被允许,而在 CSRF 倾向的请求方法(例如 POST)中被阻止。
None
(字符串):会话 cookie 将随所有同站和跨站请求发送。
False
:停用该标志。 -
SESSION_COOKIE_SECURE
:默认为False
。如果设置为 True
,cookie 将被标记为“安全”,这意味着浏览器可以确保 cookie 只在 HTTPS 连接下发送。关闭这个配置并不是一个好主意,因为攻击者可以用数据包嗅探器捕获一个未加密的会话 cookie,并使用 cookie 来劫持用户的会话 -
SESSION_ENGINE
:默认为 django.contrib.sessions.backends.db
。控制 Django 存储会话数据的地方。 -
SESSION_EXPIRE_AT_BROWSER_CLOSE
:默认为False
。是否在用户关闭浏览器时结束会话。 -
SESSION_FILE_PATH
:默认为None
。如果你使用的是基于文件的会话存储,那么这个选项设置了 Django 存储会话数据的目录,当使用默认值(None)时,Django 将使用系统的标准临时目录。 -
SESSION_SAVE_EVERY_REQUEST
:默认为False
。如果这个配置是 False
(默认),那么会话数据只有在被修改时才会被保存,也就是说,如果它的任何字典值被分配或删除,那么会话数据就会被保存。即使这个配置是活动的,也不会创建空会话。 -
SESSION_SERIALIZER
:默认为 django.contrib.sessions.serializers.JSONSerializer
。用于序列化会话数据的序列化器类的完整导入路径。
以上内容是否对您有帮助:
更多建议: