天天看点

Flask 学习-63.Session 使用

前言

Session是在 cookies 的基础上实现的,并且在 cookies 中使用加密的签名。这意味着用户可以查看 cookie 的内容, 但是不能修改它,除非它知道签名的密钥。

要使用会话,你需要设置一个密钥 SECRET_KEY

配置SECRET_KEY

1.使用固定的SECRET_KEY

from flask import Flask,session
 
app = Flask(__name__)
app.config['SECRET_KEY'] = 'xxxxx'  # 自己设置一个      

2.使用随机生成器来生成漂亮的随机值

from flask import Flask, make_response, request
import os

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)  # 随机生成      

session 使用

完整示例

from flask import Flask, make_response, request, session
import os

app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)  # 随机生成


@app.route('/set')
def set_session():
    """
    设置session
    """
    session['username'] = 'yoyo'
    session['admin'] = 'yes'
    return 'success'


@app.route('/get')
def get_seesion():
    """获取session"""
    username = session.get('username')
    return username


@app.route('/delete')
def delete_session():
    """删除session"""
    print(f"删除前:{session.get('username')}")
    session.pop('username')
    # 或者
    # session['username'] = False
    print(f"删除后:{session.get('username')}")
    return 'success'


@app.route('/clear')
def clear_session():
    """清除session中所有数据"""
    session.clear()
    print(f"删除后:{session}")
    return 'success'


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

在浏览器中看到session是以cookie方式保存的

Flask 学习-63.Session 使用

session有效期

如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束。

  • session.permanent = True在flask下则可以将有效期延长至一个月。下面有方法可以配置具体多少天的有效期。
  • 如果没有指定session的过期时间,那么默认是浏览器关闭后就自动结束
  • 如果设置了session的permanent属性为True,那么过期时间是31天。
  • 可以通过给app.config设置PERMANENT_SESSION_LIFETIME来更改过期时间,这个值的数据类型是datetime.timedelay类型。

使用示例

@app.route('/set')
def set_session():
    """
    设置session
    """
    session['username'] = 'yoyo'
    session['admin'] = 'yes'
    session.permanent = True  # 长期有效,一个月的时间有效
    return 'success'      

全局配置

from flask import Flask,session
from datetime import timedelta
import os 
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 


@app.route('/set')
def set_session():
    """
    设置session
    """
    session['username'] = 'yoyo'
    session['admin'] = 'yes'
    session.permanent = True  # 长期有效,一个月的时间有效
    return 'success'