flask框架中的cookie和session使用
作者: Ly 发布时间:2023-04-08 03:33:28
文章介绍了flask框架中的cookie和session。Session是在服务器端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
WEB -> cookie & session
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。
服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。
Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。
flask中的session和cookie
flask中的session机制是将敏感数据加密后放入session,然后将session存入cookie,下次请求时,直接从浏览器发过来的cookie中获取session,再从中获取数据进行解密
这样操作更节省服务开销,因为数据均存储到客户端
大家可能会担心这种做法的安全性,因为数据全部存储在本地浏览器,很容易被盗取,但是安全性总是相对的,而且flask里面对session也有自己的特殊加密算法,所以也不用太过于在意安全方面的问题
Session操作
1.使用sessiom需要先导入session
from flask import session
2.SECRET_KEY
一定记得要设置SECRET_KEY,用于加密数据,并且如果每次启动服务器你的秘钥都在变化的话就不能再用之前的SECRET_KEY进行解密了,我们此处就可以将它设置成固定值,对于配置文件里面变量的设置,前文讲过,如果数据量比较多就单独在config.py里面集成,但是如果只是很微量的几条设置,那么就可以在主文件里简单进行指令设置即可,类似这里的:
#生成随机的24位字符串
app.config['SECRET_KEY'] = os.urandom(24)
3.session值添加
因为session和cookie都是键值对形式的字典,所以直接用字典方法添加就可以了
session['username'] = 'user1'
4.session值删除
#1.单条删除
session.pop('username')
del session['username']
#2. 全部清除
session.clear()
5.session值获取
session.get('username')
session['username']
6.设置过期时间(如果不设置,默认浏览器退出即自动结束)
#在config.py中配置session参数PERMANENT_SESSION_LIFETIME,这个值的数据类型是datetime.timedelay类型
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
session.permanent = True #默认为31天
在Flask中对cookie的处理
1. 设置cookie:
设置cookie,默认有效期是临时cookie,浏览器关闭就失效
可以通过 max_age 设置有效期, 单位是秒
resp = make_response("success") # 设置响应体
resp.set_cookie("Itcast_1", "python_1", max_age=3600)
2.获取cookie
获取cookie,通过reques.cookies的方式, 返回的是一个字典,可以获取字典里的相应的值
cookie_1 = request.cookies.get("Itcast_1")
3.删除cookie
这里的删除只是让cookie过期,并不是直接删除cookie
删除cookie,通过delete_cookie()的方式, 里面是cookie的名字
resp = make_response("del success") # 设置响应体
resp.delete_cookie("Itcast1")
示例
from flask import Flask, make_response, request
app = Flask(__name__)
@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的方式
"""
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)
来源:https://www.py.cn/kuangjia/flask/17958.html


猜你喜欢
- 安全公司 Imperva Cloud WAF 保护了全球超过10万个网站,并且每天观察到大约10亿次攻击。他们每天都会检测到成千上万种黑客工
- 大家都知道,在SQL脚本中设置多字段做关键字相对比较简单,例:primary key(id1,id2) ,但用脚本建数据库就比较麻烦了。那么
- JDBC,Java Database Connectivity,即 Java 数据库连接。实际上 JDBC 是 Java 中的一套和数据库进
- 由于存在函数内部不能访问全局作用的,所以就需要一种可以引入上一级作用域的语法结构,可以通过use使用函数声明时所在作用域的变量的值。php的
- Tips 1:新增数据表与定义字段更加直观若要建立新数据表,可以在开启数据库后,直接单击“创建”标签,在“表”选项组中单击“表”按钮,即可新
- 1. ES6的新特性 允许将对象或者数组'分解'成多个单独的值, 以对象的解构开始. &
- PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单
- 本文实例讲述了Django框架创建mysql连接与使用。分享给大家供大家参考,具体如下:对于Django新手,你刚开始可以不使用MySQL数
- 在学校修管理学的时候,有讲过一个管理激励的理论。管理激励是基于行为和认知科学的研究,来发现人们的需要、动机、目标和行为四者之间关系的核心理论
- 前言对于文件的比较一般有几种,比如比较文件的内容,比较文件的大小,或者直接对比整个项目文件。特别是在项目的更新迭代中,可以通过该库来比较当前
- 用过食行生鲜的同学应该知道,每天可以在食行生鲜签到,签到可以领到 20 积分,在购物时可以抵 2 毛钱。钱虽少,但是积少成多,买菜时可以抵扣
- 示例:mysql> DELIMITER //mysql> CREATE PROCEDURE `statis`()
- 第一步一般是建立一个关键字替换表 如 id keyword url 等字段第二步是文章显示时把【文章】内容和【关键字替换表】对应的关键字替换
- 一般事件事件浏览器支持描述onClickIE3|N2|O3鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClickIE4|N4
- 有这样一张表,表数据及结果如下:school_idschool_nametotal_studenttest_takers1239Abraha
- 前言:今天学习python的常用模块的时候,了解到了time模块和datetime模块,于是想在编译环境中实时打印出时间,不会换行,且打印的
- 本文实例为大家分享了python定时按日期备份MySQL数据并压缩的具体代码,供大家参考,具体内容如下#-*- coding:utf-8 -
- 本文实例讲述了Python实现的重启关机程序的方法,对Python程序设计有一定的参考价值。具体方法如下:实例代码如下:#!/usr/bin
- 情况1: father.php如下定义: <?php $jack = 1000; ?> children.php 如下定义: &
- 一、MatplotlibMatplotlib是Python中众多数据可视化库的鼻祖,其设计风格与20世纪80年代设计的商业化程序语言MATL