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

时间:2017-04-09 07:54:20

标签: python security session flask server-side

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

  

变量值:

     
      
  1. 一个简单的字符串
  2.   
  3. 客户端(浏览器)不可见
  4.   
  5. 没有持久保存到数据库 - 只是在会话消失时消失
  6.   

有一个内置的Flask会话,但它会将会话数据发送到客户端:

session["secret"] = "I can see you"

数据是base64编码的,并以加密签名的cookie发送,但在客户端上阅读仍然很容易。

在许多框架中,创建服务器端会话变量是一行的,例如:

session.secret = "You can't see this"

到目前为止,我发现的Flask解决方案非常繁琐,适合处理大量数据。有简单的轻量级解决方案吗?

2 个答案:

答案 0 :(得分:4)

我认为Flask-Session扩展名是您正在寻找的。

  

Flask-Session是Flask的扩展,它为您的应用程序添加了对服务器端Session的支持。

来自链接网站:

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')

答案 1 :(得分:3)

这个答案是从2020年6月开始的烧瓶课程0.3.2
文件是here

有几个可用的SESSION_TYPES文件系统是您测试时最简单的方法。如果您要使用其他SESSION_TYPE,则期望已经有Redis或数据库等设置。 Section on SESSION_TYPE and requirements

null :NullSessionInterface(默认)
redis :RedisSessionInterface
memcached :MemcachedSessionInterface
文件系统:FileSystemSessionInterface
mongodb :MongoDBSessionInterface
sqlalchemy :SqlAlchemySessionInterface

文档中的代码示例。如果您转到/set/,则session['key']中将填充单词“ value”。但是,如果您先进入/get/,则'session ['key']将不存在,并且将返回'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')