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

标签:flask,cookie,session
0
投稿

猜你喜欢

  • MySQL数据库备份以及常用备份工具集合

    2024-01-23 04:25:53
  • 详解vue-Resource(与后端数据交互)

    2024-06-05 09:15:06
  • Pytorch 高效使用GPU的操作

    2021-10-25 04:45:23
  • django3.02模板中的超链接配置实例代码

    2021-07-12 01:02:25
  • vue实现购物车加减

    2023-07-02 17:10:04
  • gridview生成时如何去掉style属性中的border-collapse

    2024-04-18 09:36:56
  • Div+CSS网页布局对SEO的影响漫谈

    2008-08-22 12:58:00
  • python 判断linux进程,并杀死进程的实现方法

    2022-06-24 22:31:54
  • text-indent 隐藏文字时出现的 outline问题

    2007-12-02 17:31:00
  • ADSI+ASP添加IP到IIS禁止访问列表中

    2011-04-02 10:42:00
  • MySQL转义字符

    2011-06-19 16:06:04
  • 手把手教你实现Python连接数据库并快速取数的工具

    2024-01-27 12:28:09
  • mysql 5.7.14 下载安装配置方法图文教程

    2024-01-21 00:12:58
  • Oracle 正则表达式实例详解

    2024-01-25 23:43:01
  • Python实现周期性抓取网页内容的方法

    2023-04-12 01:33:36
  • ASP中生成文件的两种方式

    2007-08-30 09:49:00
  • ASP UTF-8编码下字符串截取和获取长度函数

    2011-03-30 10:52:00
  • Python turtle库绘制菱形的3种方式小结

    2022-04-10 14:08:19
  • JavaScript table的排序类

    2008-10-06 12:56:00
  • SQL语句练习实例之六 人事系统中的缺勤(休假)统计

    2011-11-03 17:15:55
  • asp之家 网络编程 m.aspxhome.com