在尝试使用Django后,我对客户端会话感到惊讶。什么阻止用户重播旧值?当我现在退出时,我的会话可以在一个月后重播。
我想为每个会话提供CSRF保护(特别是login and logout)。此外,我想在服务器端设置/取消设置会话,以便旧会话cookie无效。我希望它与消息闪烁的东西兼容。
哪种实施能满足所有这三种需求?
答案 0 :(得分:8)
Flask会话具有内置的到期日期,以加密方式强制执行。在值过期后,客户端无法重播会话值。
您可以通过设置PERMANENT_SESSION_LIFETIME
configuration option来设置最大年龄会话有效期。默认值为31天。
您可以将此值设置为更低;默认情况下,Flask刷新每个请求的cookie时间戳,这意味着只要用户继续访问,cookie就会不断刷新。将PERMANENT_SESSION_LIFETIME
设置为1小时,如果用户未访问您的服务器一小时或更长时间,会话将自动过期。
如果您感到好奇,会话会被序列化,并使用itsdangerous
project中的URLSafeTimedSerializer
进行签名。
请注意,登录信息可以使用它自己的超时;不只是在会话中记录用户名,添加上次看到该用户的时间。会话数据以加密方式签名,因此最终用户无法更改 cookie。每次用户返回时,刷新该时间戳。这样,您可以保持用户登录到期,与会话到期无关。