在Django中设置SESSION_COOKIE_SECURE = True
告诉浏览器只通过SSL发送会话cookie。但是,如果经过身份验证的用户从安全页面导航到非安全页面,则会话中间件将不知道安全会话(因为将不会发送cookie),并将设置新的会话cookie。结果是用户随后被注销,需要再次登录。
例如,用户可能会在安全管理员中编辑某些内容,点击“在网站上查看”,转到非ssl页面,然后点击返回,只是发现他们的会话已被覆盖,并且不再认证
我只是想知道解决这个问题的首选方法是什么。
我可以看到,有以下解决方案:
对网站的安全/非安全部分使用不同的(子)域。强制ssl域上的所有内容都是ssl。 (我知道这可能是首选方案,但目前不是一种选择)
为网站的安全/非安全部分使用不同的django项目(和不同的会话cookie名称)。使用nginx代理适当的django项目。
创建基于django.contrib.sessions.middleware.SessionMiddleware
的自定义中间件,根据安全/非安全手动处理会话。甚至可以检查网址是否为管理网址,并使用不同的Cookie名称和Cookie路径。
设置SESSION_SAVE_EVERY_REQUEST = False
并希望用户不会导航到使用Cookie的网页。