2

Django 中的设置SESSION_COOKIE_SECURE = True告诉浏览器仅通过 SSL 发送会话 cookie。但是,如果经过身份验证的用户从安全页面导航到非安全页面,会话中间件将不知道安全会话(因为不会发送 cookie)并将设置新的会话 cookie。效果是用户随后退出,需要重新登录。

例如,用户可能在安全管理员中编辑某些内容,单击“在站点上查看”,被带到非 SSL 页面,然后单击返回,却发现他们的会话已被覆盖,并且不再经过身份验证。

我只是想知道解决这个问题的首选方法是什么。

如我所见,有以下解决方案:

  1. 为网站的安全/非安全部分使用不同的(子)域。强制 ssl 域上的所有内容为 ssl。(我知道这可能是首选选项,但目前不是一个选项)

  2. 对站点的安全/非安全部分使用不同的 django 项目(和不同的会话 cookie 名称)。使用 nginx 代理到适当的 django 项目。

  3. 创建一个自定义中间件django.contrib.sessions.middleware.SessionMiddleware,根据安全/非安全手动处理不同的会话。甚至可能检查 url 是否是管理员 url,并使用不同的 cookie 名称和 cookie 路径。

  4. 设置SESSION_SAVE_EVERY_REQUEST = False并希望用户不要导航到使用 cookie 的页面。

4

0 回答 0