Flask中的Cookie/Session/Token

概念

Cookie 一般保存在浏览器端,返回数据的时候使用request.make_response来实现存储,因为在客户端,所以只能设置过期而不能做到正真的删除。
Session 一般保存在服务器端,设置的时候直接使用requset.session就可以,而且session相当于一个全局的字典变量;
Token的获取和实现,需要一个方式来生成和验证 JWT(JSON Web Tokens)。通过安装 Flask-JWT-Extended 来实现:

  pip install Flask-JWT-Extended

在使用之前必须需要初始化一个JWTManger。

实现

from flask import Flask, make_response, request,session,jsonify
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity,JWTManager
app = Flask(__name__)

app.config['JWT_SECRET_KEY'] = 'jwt_secret_key'
app.config['SECRET_KEY'] = 'session_secret_key'
jwt = JWTManager(app)

@app.route('/set_session')
def set_session():
    session['name'] = 'test'
    return 'set session success'


@app.route('/get_session')
def get_session():
    return session.get('name')

@app.route('/del_session')
def del_session():
    session.pop('name')
    return 'delete session success'

@app.route('/set_token')
def set_token():
    identity = 'hello world'
    access_token = create_access_token(identity=identity)
    return jsonify(access_token = access_token,status = 'ok')


@app.route('/get_token')
@jwt_required()
def get_token():
    identity = get_jwt_identity()
    return identity


@app.route("/set_cookie")
def set_cookie():
    resp = make_response("success")
    '''
        设置cookie,默认有效期是临时cookie,浏览器关闭就失效
        可以通过 max_age 设置有效期, 单位是秒
    '''''
    resp.set_cookie("Itcast_1", "python_1")
    resp.set_cookie("Itcast_2", "python_2")
    resp.set_cookie("Itcast_3", "python_3", max_age=3600)
    return resp
 
 
@app.route("/get_cookie")
def get_cookie():
    """
        获取cookie,通过reques.cookies的方式,
        返回的是一个字典,可以用get的方式
    """
    print(request.headers)
    cookie_1 = request.cookies.get("Itcast_1")  # 获取名字为Itcast_1对应cookie的值
    return cookie_1
 
 
@app.route("/delete_cookie")
def delete_cookie():
    """
        删除cookie,通过delete_cookie()的方式,
        里面是cookie的名字
        这里的删除只是让cookie过期,并不是直接删除cookie
    """
    resp = make_response("del success")
    resp.delete_cookie("Itcast1")
    return resp
 
 
if __name__ == '__main__':
    app.run(debug=True)

总结

无论Cookie,亦或Session,还是Token,都是对用户身份的一个认定方式。

本文著作权归作者 [ zealoner ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。

发表留言