IT大白也能学会Flask cookie和session会话

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
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flask中创建session会话可以使用内置的`session`对象,具体步骤如下: 1. 在Flask应用中引入`session`对象: ```python from flask import Flask, session ``` 2. Flask默认使用Cookie存储session,需要设置一个密钥来加密Cookie。 ```python app = Flask(__name__) app.secret_key = 'your_secret_key' ``` 3. 在需要创建session的地方,可以使用`session`对象来存储数据。例如: ```python @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # 验证用户名和密码 if username == 'admin' and password == '123456': session['username'] = username return redirect(url_for('index')) else: flash('用户名或密码错误!') return render_template('login.html') ``` 在上面的例子中,如果用户名和密码验证通过,就将用户名存储到session中。 4. 在其他页面可以通过`session`对象来获取存储在session中的数据。例如: ```python @app.route('/') def index(): if 'username' in session: username = session['username'] return 'Hello, %s!' % username else: return redirect(url_for('login')) ``` 在上面的例子中,如果session中存在用户名,则显示欢迎信息,否则跳转到登录页面。 注意:在使用session之前,需要安装`flask-session`扩展,可以使用以下命令安装: ``` pip install flask-session ``` 然后在应用中引入`Session`对象: ```python from flask_session import Session app = Flask(__name__) app.config['SESSION_TYPE'] = 'filesystem' Session(app) ``` 在上面的例子中使用了文件系统来存储session,当然也可以使用其他方式,例如Redis等。具体请参考`flask-session`的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值