我正在使用:
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扩展程序,但这仍然可以正常工作。我试图理解为什么以及何时扩展对我不利。据我所知,默认会话对我来说效果很好。
答案 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/