简单的服务器端 Flask 会话变量

Simple server-side Flask session variable

在 Flask 中拥有服务器端会话变量的最简单方法是什么?

Variable value:

  1. A simple string
  2. Not visible to the client (browser)
  3. 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')