02 flask-session组件

421次阅读
没有评论

共计 3126 个字符,预计需要花费 8 分钟才能阅读完成。

一.flask-session 组件的作用

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

  • redis
  • memcached
  • filesystem
  • mongodb
  • sqlalchmey
  • ....

二. 安装

pip3 install flask-session

三.flask-session 的使用

👉更多存储方式介绍 : https://www.jb51.net/article/153452.htm

1. 保存 Redis 中

  • 使用方式一:
from flask import Flask, session, request, render_template
from flask_session import RedisSessionInterface
import redis

app = Flask(__name__)
app.debug = True

conn = redis.Redis(host='127.0.0.1', port=6379)

# conn 传的就是 redis 连接, 源码里边做判断, 如果没传则自动帮你创建一个 redis 连接
# use_signer 参数: 是否对 key 签名
# key_prefix
app.session_interface = RedisSessionInterface(conn, key_prefix='abc')


@app.route('/index/', methods=['post', 'get'])
def index():
    if request.method == "GET":
        return render_template('index.html')
    else:
        session['username'] = request.form.get('username')
        session['password'] = request.form.get('password')
        # 在 redis 保存的键名 (类似于 jwt 的三段式) :
        # abceyJuYW1lIjoic2hhd24ifQ.YLkAOA.YQYs5z7EbIWcqJENQmNXZmiWt7A
        get_session()
        return 'ok'


def get_session():
    print(session['username'])
    print(session['password'])


if __name__ == '__main__':
    app.run()
  • 使用方式二 :
# 将 app.session_interface = RedisSessionInterface(conn, key_prefix='abc') 替换成下面语句:

from flask.ext.session import Session

app.config['SESSION_TYPE'] = 'redis'  # 设置 session 类型为 redis
app.config['SESSION_REDIS'] = conn  # 设置连接 redis 的配置
Session(app)
  • 使用配置类的方式书写
## settings.py
from datetime import timedelta
from redis import Redis


class Config(object):
    DEBUG = True
    SECRET_KEY = "random_key"
    PERMANENT_SESSION_LIFETIME = timedelta(minutes=20)
    SESSION_REFRESH_EACH_REQUEST = True
    SESSION_TYPE = "redis"


# 生产环境
class ProductionConfig(Config):
    SESSION_REDIS = Redis(host='192.168.0.94', port='6379')


# 开发环境
class DevelopmentConfig(Config):
    SESSION_REDIS = Redis(host='127.0.0.1', port='6379')


# 测试环境
class TestingConfig(Config):
    pass


## run.py
from flask import Flask, session, request, render_template
from datetime import timedelta

app = Flask(__name__)

app.config.from_object('settings.DevelopmentConfig')
from flask.ext.session import Session
Session(app)

@app.route('/index/', methods=['post', 'get'])
def index():
    if request.method == "GET":
        return render_template('index.html')
    else:
        # get_session()
        session['username'] = request.form.get('username')
        session['password'] = request.form.get('password')
        session.permanent = True
        app.permanent_session_lifetime = timedelta(minutes=1)  # 设置 session 到期时间
        # 在 redis 保存的键名 (类似于 jwt 的三段式) : abceyJuYW1lIjoic2hhd24ifQ.YLkAOA.YQYs5z7EbIWcqJENQmNXZmiWt7A
        get_session()
        return 'ok'


def get_session():
    print(session['username'])
    print(session['password'])


if __name__ == '__main__':
    app.run()

四. 设置 cookie 存活时间

1. 设置 cookie 在关闭浏览器时失效

# 直接设置 cookie, exipre: 失效, 终止
response.set_cookie('k','v',exipre=None)

# 在 session 中设置,permanent: 永久的 (默认是 True)
app.session_interface=RedisSessionInterface(conn,key_prefix='lqz',permanent=False)

一般我们不会使用第一种方式, 而是设定超时时间

2. 查看及设置默认超时时间

  • 查看
# 可以通过查看源码发现默认的超时时间
# expires = self.get_expiration_time(app, session)
timeout = app.config['PERMANENT_SESSION_LIFETIME']
print(timeout)  # 31 days, 0:00:00

02 flask-session 组件

  • 設置
# cookie 直接设置
# exipre 传入一个时间对象来指定过期时间
expires = datatime.now()+timedelta(days=30,hourse=10)
response.set_cookie('k','v',exipre=expires)
# max_age 参数传入时间来指定过期时间, 单位为秒 (若 exipre 和 max_age 都存在, 后者优先)
response.set_cookie('k','v',max_age=60)

# session 设置 (在 index 视图函数中写入下面两行)
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=1)  # 设置 session 到期时间

02 flask-session 组件

正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计3126字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)