Flask cookie session会话
Flask 会话技术的作用
在你访问网站时候,网站是如何认识我们,我们在请求网站的过程中,就会有一个凭证证明你的身份,而这个凭证是在请求服务器的时候,服务器下发给你的一个凭证。我们通过这个凭证,让网站判断我们的身份,这个技术就是cookie技术
下面是一个简易的请求向服务器请求及服务器下发的cookie流程走向。
flask下发cookie
from flask import make_response
@app.routu("/set_cookie/")
def set_cookie():
# cookie是下发给游览器的
# response是返回给游览器的工具,下发cookie只要在返回值里面内容
response = make_response(
render_template("index.html",**locals()) # 将返回的内容转化为response对象
)
# 其中设置cookie值key 对应"username",value对应"zhansan"
response.set_cookie("username","zhansan")
response.set_cookie("user_id","281")
return response # 返回带有cookie值的响应
生成的cookie值从游览器中查看,这种查看也叫抓包技术,效果如下图
进入index中查看下发的cookie
flask删除cookie
要删除本地游览器的cookie,就要通过response进行删除
from flask import request
@app.route("/")
def index():
# 获取游览器的cookie
username = request.cookie.get("username")
user_id = request.cookie.get("user_id")
response = make_response(render_template("index.html",**locals()))
# 删除cookie
response.delete_cookie("username")
response.delete_cookie("use_id")
return response
return render_template("login.html")
添加cookie虽然提高了安全系数,但是其安全系数还是不足够高,所以我们在基础上引入了session技术。
seesion在flask框架中,session的方法就是一个类字典对象,操作session和操作字典类似,其中session是采用加盐加密算法,需要我们自己设定盐值。
加盐配置一下代码:
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
base_dir = os.path.dirname( # 返回路径的目录
os.path.abspath(__file__) # __file__当前文件夹,abspath是绝对路径
)
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join(base_dir, "OA.sqlite")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
# 这条配置是在设置cookie基础上,设置盐值
# 其中yanzhi这个参数就是自己设置的盐值,根据自己的情况设置
app.config["SECRET_KEY"] = "yanzhi"
配置完盐值后将盐值导入
from flask import request
# 导入前先引入
from flask import session
@app.route("/")
def index():
# 获取游览器的cookie
username = request.cookie.get("username")
user_id = request.cookie.get("user_id")
response = make_response(render_template("index.html",**locals()))
# 删除cookie
response.delete_cookie("username")
response.delete_cookie("use_id")
# 设置
session["username"] = username
return response
return render_template("login.html")
在我们一个比较完整项目中,仅仅在对登陆添加cookie和设置session是不够完善的,在用户退出登陆时候我们要及时删去访问时所下发的cookie和设置的sesson,下面是对在用户退出时,将下发的cookie和设置的session删除操作:
@app.route("/out/")
@loginValid # 这是一个装饰器,时验证登陆时候账号和密码是否存在的
def out():
response = redirect("/login/")
response.delete_cookie("username")
response.delete_cookie("user_id")
response.delete_cookie("name")
# 获取盐值
session.get("username")
# 清空盐值
session.clear()
return response