会话控制
cookie
说明:
因为HTTP协议无状态无连接的特点,导致一个用户在同一网站做连续操作,需要不断的提供身份信息;为了解决这个问题,我们可以通过cookie携带特定的信息加以解决。当首次访问网站时设置cookie信息,以后每次再访问该网站时,浏览器会自动携带cookie信息。
使用:
from flask import Blueprint, request, make_response cookie = Blueprint('cookie', __name__, url_prefix='/cookie') # 获取 @cookie.route('/get/') def get_cookie(): return request.cookies.get('name', '你是哪个二哥?') # 设置 @cookie.route('/set/') def set_cookie(): resp = make_response('cookie已设置') # 设置cookie,默认有效期为浏览器关闭 # expires:有效期,是一个datetime类型的参数 # max_age:有效期,是一个int类型的参数,推荐使用 resp.set_cookie('name', '二狗', max_age=10) return resp # 删除 @cookie.route('/del/') def del_cookie(): resp = make_response('cookie已删除') # 删除cookie,其实是设置cookie立即失效 resp.delete_cookie('name') return resp
session
说明:
session是一种比cookie更加安全的携带信息的方案,功能与cookie相同。
分类:
- server side session:数据存放在服务器上,客户端保存的是seesion_id(通过cookie传输)
- client side session:将session数据加密编码,然后保存到客户端,flask默认采用的就是这种方案
使用:
from flask import Blueprint, session sess = Blueprint('sess', __name__, url_prefix='/session') # 获取 @sess.route('/get/') def get_session(): return session.get('name', 'who are you?') # 设置 @sess.route('/set/') def set_session(): # 设置有效期,默认浏览器关闭即失效 # 设置为True,session有效期为永久 # 永久的时间由PERMANENT_SESSION_LIFETIME配置选项决定,默认31天 session.permanent = True session['name'] = 'cuihua' return 'session已设置' # 删除 @sess.route('/del/') def del_session(): # 删除指定的session,第二个参数设置为None,session不存在也不报错 # session.pop('name', None) # 清空session session.clear() return 'session已删除'
flask-session
说明:将session数据保存到服务器的解决方案。
安装:
pip install flask-session
使用:
from flask import Flask, session from flask_script import Manager from redis import Redis from flask_session import Session app = Flask(name) app.config['SECRET_KEY'] = '123456' app.config['SESSION_TYPE'] = 'redis' app.config['SESSION_REDIS'] = Redis() manager = Manager(app) sess = Session(app) # 可以通过两步进行初始化 # sess.init_app(app) @app.route('/') def index(): return 'flask-session' @app.route('/get/') def get_session(): return session.get('name', '你是谁?') @app.route('/set/') def set_session(): session['name'] = 'dahua' return 'session已设置' if __name__ == '__main__': manager.run()