zoukankan      html  css  js  c++  java
  • flask插件之flask_session会话机制

    flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如:

    • redis:保存数据的一种工具,五大类型。非关系型数据库
    • memcached
    • filesystem
    • mongodb
    • sqlalchmey:那数据存到数据库表里面

    一、安装flask_session

    pip3 install flask-session

    二、实现方式

    我在之前的博客中已经分析过了flask的上下文管理机制以及请求流程,不知道flask上下文管理机制的可以翻阅我之前写的博客,假如你曾经对flask上下文管理的源码进行过剖析,接下来我将直接从ctx.push()方法讲起。

    这里的session_interface = SecureCookieSessionInterface(),是flask中默认的,所以我们如果把session_interface重新赋值,那么open_session执行的就不会是flask中默认的session_interface而应该是我们重新赋值的类中的open_session。flask_session就是通过对session_interface重新赋值,来达到将session值存储在不同的地方。

    三、flask_session参数配置

    • SESSION_COOKIE_NAME
    设置返回给客户端的cookie的名称,默认是“session”;放置在response的头部;
    • SESSION_COOKIE_DOMAIN
    设置会话的域,默认是当前的服务器,因为Session是一个全局的变量,可能应用在多个app中;
    • SESSION_COOKIE_PATH
    设置会话的路径,即哪些路由下应该设置cookie,如果不设置,那么默认为‘/’,所有的路由都会设置cookie;
    • SESSION_COOKIE_HTTPONLY
    cookie应该和httponly标志一起设置,默认为True,这个一般采用默认。
    • SESSION_COOKIE_SECURE
    cookie是否和安全标志一起设置,默认为false,这个一般采用默认。
    • PERMANENT_SESSION_LIFETIME
    设置session的有效期,即cookie的失效时间,单位是s。这个参数很重要,因为默认会话是永久性的。
    • SESSION_TYPE
    设置session保存的位置,可以有多种配置,
    SESSION_TYPE = ‘null’          : 采用flask默认的保存在cookie中;
    SESSION_TYPE = ‘redis’         : 保存在redis中
    SESSION_TYPE = ‘memcached’     : 保存在memcache
    SESSION_TYPE = 'filesystem'      : 保存在文件
    SESSION_TYPE = 'mongodb'        : 保存在MongoDB
    SESSION_TYPE = 'sqlalchemy'     : 保存在关系型数据库
    • SESSION_PERMANENT
    是否使用永久会话,默认True,但是如果设置了PERMANENT_SESSION_LIFETIME,则这个失效;
    • SESSION_USE_SIGNER
    是否为cookie设置签名来保护数据不被更改,默认是False;如果设置True,那么必须设置flask的secret_key参数;
    • SESSION_KEY_PREFIX
    在所有的会话键之前添加前缀,对于不同的应用程序可以使用不同的前缀;默认“session:”,即保存在redis中的键的名称前都是以“session:”开头;
    
    for example:
    SESSION_KEY_PREFIX = 'session:'
    • SESSION_REDIS
    如果SESSION_TYPE = ‘redis’,那么设置该参数连接哪个redis,其是一个连接对象;如果不设置的话,默认连接127.0.0.1:6379/0
    for example:
    SESSION_REDIS = redis.StrictRedis(host="127.0.0.1", port=6390, db=4)

    关于其他的保存中间人参考:https://pythonhosted.org/Flask-Session/

    四、一份常用的flask_session的配置

    # 指明对session数据进行保护
    SECRET_KEY = '123'
    SESSION_USE_SIGNER = True  
    # 指明保存到redis中
    SESSION_TYPE = "redis"  
    SESSION_REDIS = redis.StrictRedis(host="127.0.0.1", port=6390, db=4)
    # session的有效期,单位:秒
    PERMANENT_SESSION_LIFETIME = 7200 

    五、flask_session的基本使用

    from flask import Flask,session
    from flask_session import Session
    from redis import Redis
    
    app = Flask(__name__)
    app.config["SESSION_TYPE"] = "redis"
    app.config["SESSION_REDIS"] = Redis(host="127.0.0.1",port=6379,db=6)
    
    Session(app)
    
    @app.route("/")
    def index():
        session["user"] = "value"
        return "hello"
    
    if __name__ == '__main__':
        app.run(debug=True)
     
  • 相关阅读:
    黄金作为货币的本质
    万有引力和做功。
    Arp攻击实战
    Android SDK下载项的说明
    宇宙、事象
    事件视界
    微积分
    金融的三大基础货币,股票,期货。
    pos机的热敏纸尺寸
    去除text历史记录
  • 原文地址:https://www.cnblogs.com/fengchong/p/10271482.html
Copyright © 2011-2022 走看看