使用SignedCookieSessionFactory时,文档指出已使用sha512 HMAC摘要算法.结果,一旦会话数据被序列化,就将其签名并在会话cookie下发送给用户的客户端.
Pyramid的文档中没有提到会话也在服务器端缓存(在此SessionFactory下).
当与SessionAuthenticationPolicy配对时,这会带来矛盾并导致身份验证混乱.如果无法从客户端的会话cookie中检索会话数据(因为它是单向散列的),那么怎么可能做到以下几点?
>使用应用程序进行身份验证,以使读取Request.authenticated_userid不会返回None.
>将会话Cookie复制到剪贴板.
>通过访问一个视图注销,从而将来自forget(request)的标头返回到响应中.
>用复制的值替换会话cookie.
>用户现在重新登录.
我了解,仅删除Cookie客户端不足以完全使会话无效(不列入黑名单),但这会带来以下问题:
>除非以某种方式记住用户最近发出的每个会话cookie并将其列入黑名单/使它们无效,否则如何在浏览器范围的会话中保持安全?
>会话cookie实际上是否是用于在内存中查找会话的密钥/会话ID?因为它是单向签名,所以肯定是唯一的解释吗?
>那么是否有可能使服务器端的会话无效,而不仅仅是headers = forget(request)模式更强大?
最终,我想答案是这样的:
“使用诸如pyramid_redis_sessions之类的包含项来维护服务器端会话”
任何解释将不胜感激.