我很好奇Flask会话是如何工作的,特别是它如何在服务器重启之间存储信息(如果我错了,请引用我).我知道你必须设置一个唯一的,app.secret_key这样人们就无法解密会话并以任何方式修改cookie.因为会话的cookie只是随机生成的字母和数字,这是否意味着id与服务器端的id配对,并且服务器存储会话?如果是这样,Flask将如何记住重启之间的会话?如果没有,Flask如何知道解密会话cookie?
dav*_*ism 12
默认会话使用安全cookie实现.Cookie由客户端的浏览器保留,Flask在这方面没有做任何事情.每个客户端都有一个唯一的会话cookie,它会随每个请求发送到Flask服务器.
cookie是安全的,不加密,它不会阻止任何有cookie的人查看数据,只能修改它.Flask在发送数据时使用应用程序的密钥对数据进行签名,并在阅读时使用相同的密钥对其进行签名.
Flask不会向会话添加任何内容.没有会话ID,浏览器只在每个请求期间发送会话cookie,Flask读取它.
您可以编写自己的会话界面来更改会话的工作方式.请参阅Flask-Session等扩展
Flask 使用其姊妹项目It's Dangerous生成会话 cookie 。项目页面对 It's Dangerous 的工作原理进行了很好的概述,但处于较高的水平:
session["username"] = "EndenDragon")被序列化为 JSON 字符串 ( {"username":"EndenDragon"})eyJ1c2VybmFtZSI6IkVuZGVuRHJhZ29uIn0=) 进行编码。这使得电子邮件验证链接等用例变得安全,它可能会附加在链接的末尾。然后该值作为响应中的Cookie 发送到浏览器。
最终用户可以读取会话中的值(并且通过不安全的连接)。服务器可以验证它收到的 cookie 没有被篡改,而无需在其末端存储任何内容。它只是根据会话值的会话+时间戳部分重新计算签名,并确保它与会话值末尾的签名匹配。
除了在客户端设置过期日期之外,包含时间戳还使 Flask 能够在服务器端强制设置permanent会话的过期日期。
附录
用户可以通过解码会话值的第一部分轻松读取会话中的值。转到开发者工具中的“存储”或“应用程序”选项卡,查找"session"cookie,将值复制到第一个句点,然后btoa(<session-part>)在控制台中运行。
| 归档时间: |
|
| 查看次数: |
3813 次 |
| 最近记录: |