提问人:Dem Pilafian 提问时间:4/9/2017 最后编辑:Peter MortensenDem Pilafian 更新时间:12/31/2020 访问量:16342
简单的服务器端 Flask 会话变量
Simple server-side Flask session variable
问:
在 Flask 中使用服务器端会话变量的最简单方法是什么?
变量值:
- 一个简单的字符串
- 对客户端(浏览器)不可见
- 未保存到数据库 -- 在会话消失时消失
有一个内置的 Flask 会话,但它将会话数据发送到客户端:
session["secret"] = "I can see you"
数据经过 Base64 编码,并以加密签名的 cookie 发送,但在客户端上读取仍然微不足道。
在许多框架中,创建服务器端会话变量是单行的,例如:
session.secret = "You can't see this"
到目前为止,我发现的 Flask 解决方案非常繁琐,并且适用于处理大量数据。有没有一个简单的轻量级解决方案?
答:
10赞
langlauf.io
11/24/2017
#1
我认为 Flask-Session 扩展是您正在寻找的。
Flask-Session 是 Flask 的扩展,它为应用程序添加了对服务器端会话的支持。
从链接的网站:
from flask import Flask, session
from flask_session import Session # new style
# from flask.ext.session import Session # old style
app = Flask(__name__)
# Check Configuration section for more details
SESSION_TYPE = 'redis'
app.config.from_object(__name__)
Session(app)
@app.route('/set/')
def set():
session['key'] = 'value'
return 'ok'
@app.route('/get/')
def get():
return session.get('key', 'not set')
评论
5赞
Jason
2/18/2019
此处的示例代码不起作用。似乎 Flask-Session 发生了变化,更不用说自从 Flask-Session 的代码签入以来已经有 2 年了。至少将 import 更改为 .但仅凭这一点是不够的。我仍在尝试弄清楚如何让这个包工作。from flask_session import Session
0赞
Akash senta
5/29/2020
为任何人工作吗?我试图实现相同的方法,但没有奏效。任何人都可以分享工作示例。谢谢
0赞
Nirav Mistry
3/25/2023
是的,执行 “pip install Flask-Session” 来安装flask_session包
7赞
fcsr
6/25/2020
#2
此答案来自 2020 年 6 月的 flask-session 0.3.2。 文档在这里。
有几个可用的文件系统是测试时最直接的。如果您要使用其他 s. SESSION_TYPE和要求部分,则期望您已经拥有 Redis、数据库等设置SESSION_TYPES
SESSION_TYPE
- null:NullSessionInterface(默认值)
- Redis:RedisSessionInterface
- Memcached:MemcachedSessionInterface
- 文件系统:FileSystemSessionInterface
- MongoDB的:MongoDBSessionInterface
- SQLAlchemy:SqlAlchemySessionInterface
文档中的代码示例。如果转到,则填充了“值”一词。但是如果你先去,那么'session['key']将不存在,它将返回'not set'。/set/
session['key']
/get/
from flask import Flask, session
from flask_session import Session
app = Flask(__name__)
app.config['SESSION_TYPE'] = 'filesystem'
#personal style preference compared to the first answer
Session(app)
@app.route('/set/')
def set():
session['key'] = 'value'
return 'ok'
@app.route('/get/')
def get():
return session.get('key', 'not set')
评论
0赞
Ilan Yashuk
6/10/2022
可以肯定的是,var 的设置方式是唯一正确的方式,正如 Martijn Pieters 指出的那样:“对于 Flask 0.10 或更高版本来说,这没有多大意义;NullSession 在 Flask 0.8 或 0.9 中可能很有意义,但在当前版本中,flask.session.NullSession 类被用作错误信号。在你的情况下,它现在给你错误的错误消息。SESSION_TYPE
评论