Flask-Session扩展与默认会话

时间:2015-08-19 00:26:47

标签: python flask

我正在使用:

from flask import session

@app.route('/')
def main_page():
    if session.get('key'):
        print ("session exist" + session.get('key'))
    else:
        print ("could not find session")
        session['key'] = '34544646###########'
    return render_template('index.html')

我没有安装Flask-Session扩展程序,但这仍然可以正常工作。我试图理解为什么以及何时扩展对我不利。据我所知,默认会话对我来说效果很好。

2 个答案:

答案 0 :(得分:28)

区别在于会话数据的存储位置。

Flask的会话是客户端会话。您写入会话的任何数据都将写入cookie并发送到客户端进行存储。客户端会在每次请求时将cookie发送回服务器,这就是您在会话中写入的数据在后续请求中仍然可用的方式。存储在cookie中的数据经过加密签名以防止任何篡改。您的配置中的SECRET_KEY设置用于生成签名,因此只要您的密钥保密,您的客户端会话中的数据就是安全的。请注意,此上下文中的 secure 表示潜在攻击者无法修改会话中的数据。任何知道如何查看的人都可以看到这些数据,因此您不应该在客户端会话中编写敏感信息。

Flask-Session和Flask-KVSession是Flask实现服务器端会话的两个扩展。从应用程序的角度来看,这些会话的工作方式与Flask本机会话完全相同,但它们将数据存储在服务器中。数据永远不会发送到客户端,因此可以提高安全性。客户端仍然会收到已签名的cookie,但cookie中唯一的数据是会话ID ,它引用存储数据的服务器中的文件或数据库索引。

答案 1 :(得分:0)

from flask import session

所有会话数据的 Cookie 都存储在客户端。

优点: 验证和创建会话很快(无数据存储) 易于扩展(无需跨 Web 服务器复制会话数据)

缺点: 敏感数据不能存储在会话数据中,因为它存储在网络浏览器中 会话数据受 cookie 大小限制(通常为 4 KB) Flask 应用无法立即撤销会话

from flask_session import Session

会话数据存储在服务器端。

优点: 敏感数据存储在服务器上,而不是网络浏览器中 您可以根据需要存储尽可能多的会话数据,而无需担心 cookie 大小 Flask 应用程序可以轻松终止会话

缺点: 难以设置和扩展 由于必须管理会话状态而增加了复杂性

*此信息来自 Patrick Kennedy 在本优秀教程中的内容:https://testdriven.io/blog/flask-server-side-sessions/