简单的服务器端 Flask 会话变量
Simple server-side Flask session variable
在 Flask 中拥有服务器端会话变量的最简单方法是什么?
Variable value:
- A simple string
- Not visible to the client (browser)
- Not persisted to a DB -- simply vanishes when the session is gone
有一个内置的Flask会话,但是它发送会话数据给客户端:
session["secret"] = "I can see you"
数据经过 Base64 编码并在加密签名的 cookie 中发送,但在客户端读取仍然很容易。
在很多框架中,创建服务端session变量都是一行,比如:
session.secret = "You can't see this"
到目前为止,我发现的 Flask 解决方案非常繁琐,并且适合处理大块数据。有没有简单的轻量级方案?
我认为 Flask-Session 扩展名正是您要找的。
Flask-Session is an extension for Flask that adds support for Server-side Session to your application.
来自链接网站:
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')
此答案来自 2020 年 6 月的 flask-session 0.3.2。
文档是 here.
有几个可用的 SESSION_TYPES
。 文件系统 是您测试时最直接的。如果您要使用其他 SESSION_TYPE
,则期望您已经设置了 Redis、数据库等。 Section on SESSION_TYPE and requirements
- null:NullSessionInterface(默认)
- Redis:RedisSessionInterface
- Memcached:MemcachedSessionInterface
- 文件系统:文件系统会话接口
- MongoDB: MongoDBSessionInterface
- SQLAlchemy:SqlAlchemySessionInterface
文档中的代码示例。如果您转到 /set/
,则 session['key']
会填充 'value'。但是如果你先去/get/
,那么`session['key']就不存在了,会return'not set'.
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')
在 Flask 中拥有服务器端会话变量的最简单方法是什么?
Variable value:
- A simple string
- Not visible to the client (browser)
- Not persisted to a DB -- simply vanishes when the session is gone
有一个内置的Flask会话,但是它发送会话数据给客户端:
session["secret"] = "I can see you"
数据经过 Base64 编码并在加密签名的 cookie 中发送,但在客户端读取仍然很容易。
在很多框架中,创建服务端session变量都是一行,比如:
session.secret = "You can't see this"
到目前为止,我发现的 Flask 解决方案非常繁琐,并且适合处理大块数据。有没有简单的轻量级方案?
我认为 Flask-Session 扩展名正是您要找的。
Flask-Session is an extension for Flask that adds support for Server-side Session to your application.
来自链接网站:
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')
此答案来自 2020 年 6 月的 flask-session 0.3.2。 文档是 here.
有几个可用的 SESSION_TYPES
。 文件系统 是您测试时最直接的。如果您要使用其他 SESSION_TYPE
,则期望您已经设置了 Redis、数据库等。 Section on SESSION_TYPE and requirements
- null:NullSessionInterface(默认)
- Redis:RedisSessionInterface
- Memcached:MemcachedSessionInterface
- 文件系统:文件系统会话接口
- MongoDB: MongoDBSessionInterface
- SQLAlchemy:SqlAlchemySessionInterface
文档中的代码示例。如果您转到 /set/
,则 session['key']
会填充 'value'。但是如果你先去/get/
,那么`session['key']就不存在了,会return'not set'.
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')