Flask 入门系列 Cookie与session的介绍
作者:tigeriaf 发布时间:2022-06-21 00:45:44
一、Cookie的使用
1、什么是Cookie
我们都知道,HTTP
协议是无状态的,也就是说,在一次请求响应结束后,服务端不会保留任何对方状态的信息,对于某些需要保留的信息,可以通过 Cookie
技术来完成,通过在请求和响应报文中添加 Cookie
数据来保存客户端的状态信息。
Web 服务器为了存储某些数据(比如用户信息) 而保存在浏览器上的小型文本数据,浏览器会在一定时间内保存它,在下次向该服务器发送请求时附带这些数据,Cookie
通常被用来进行用户会话管理(比如用户的登录状态),保存用户的一些信息。
2、在Flask中使用Cookie
在 Flask
中,如果想要在响应中添加一个 cookie
,可以使用 response
对象的set_cookie()
方法。
set_ cookie()方法的参数如下:
key
:cookie
键名value
:cookie
值max_age
:cookie
被保存的时间,单位:秒expires
:具体的过期时间path:限制
cookie
可用的路径,默认为整个域名domain
:cookie
可用的域名secure
:设置为True
,只有通过 HTTPS 才可使用httponly
:设置为True
,禁止客户端 js 获取cookie
具体使用如下:
@app.route('user/<name>')
def user(name):
response = make_response('hello {}'.format(name), 200)
response.set_cookie("name", name)
return response
在 Flask
中,Cookie
可以通过 request
请求对象 cookies
属性获取。
@app.route('/hello')
def hello():
user = request.args.get('name')
if not user:
user = request.cookies.get("name", 'default')
return 'Hello {}!'.format(user)
二、session的使用
1、什么是session
session
指用户会话,会话可以用来保存当前请求的一些状态,以便于在请求之前共享信息。session是存储在服务端的,通过唯一标识区分用户 session,即 session id
,一般情况下,session id
是存在 Cookie
中的,服务端可以获取 Cookie
中的 session id
来获取用户 session
。
2、Flask中的session对象
我们了解了 Cookie
最重要的功能是用来保存客户端用户的状态信息。但是存在这样一个问题,Cookie 是保存在客户端的,在浏览器中可以轻易的添加和修改 Cookie
,而且如果把用户的状态信息以明文的方式存储在 Cookie
里的话,那么就可以通过伪造 Cookie 信息来伪造别人的用户信息,从而获取一些权限。为了避免这个问题,我们要对敏感的 Cookie 内容进行加密。Flask 提供了 session
对象就是用来将 Cookie 数据加密存储的。
3、在Flask中使用session
session
需要通过密钥对数据进行签名以加密数据,因此,需要先设置一个密钥app.secret_key
,这里设置的密钥只是一个简单示例,在生产环境中,必须要随机生成的密钥,保证秘钥的复杂度度和随机性,才更安全。
# 设置密钥
app.secret_key = 'qwertyuiop'
@app.route('/user', methods=['POST', 'GET'])
def user():
if request.method == 'POST':
user = request.form['user_name']
session['user_name'] = request.form['user_name']
return 'Hello {}!'.format(user)
else:
if 'user_name' in session:
return 'Hello {}!'.format(session["user_name"])
session
对象的使用就跟字典一样,如上,用户使用POST请求登录后,在 session
中保存用户名,下次再使用GET请求时,不传递任何信息,也可以在 session
中获取该用户的信息。
想要清除 session 指定信息的话,例如用户名,可以使用 session.pop("user_name", None)
,清除全部的话可以使用session.clear()
。
来源:https://juejin.cn/post/7030627770677854245


猜你喜欢
- PHP中的MYSQL常用函数1、mysql_connect()-建立数据库连接格式:resource mysql_connect([stri
- 首先要介绍的是 Python Imaging Library,使用方法如下:from PIL import Imagefrom PIL.Ex
- 不知道在坛子里有多少朋友使用触发器,如果你已经对触发器很了解了,那么请跳过此文,如果你还没有使用过触发器的话,那就让我们来认识一下吧。相关阅
- 最近在学习python爬虫,看到网上有很多关于模拟豆瓣登录的例子,随意找了一个试了下,发现不能运行,对比了一下代码和豆瓣网站,发现原来是豆瓣
- PHP _construct() 函数实例函数创建一个新的 SimpleXMLElement 对象,然后输出 body 节点的内容:<
- 简介Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建
- 在观看唐宇迪老师图像处理的课程中,其中有一个答题卡识别的小项目,在此结合自己理解做一个简单的总结。1. 项目分析首先在拿到项目时候,分析项目
- 为新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有
- 前言大家应该都知道,Centos是目前最为流行的Linux服务器系统,其默认的Python 2.x,但是根据python社区的规划,在不久之
- 事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章。什么?你还不知
- pandas每次多Sheet写入文件,只能一次性存入,不然每次会重写文件,最后只保留最后一次的写入。# !usr/bin env pytho
- 解决IDEA翻译插件Translation报错更新TTK失败不能使用有好久一段时间没有用idea的插件Translation,升级后使用翻译
- 引言with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ im
- 关于 channel 的使用,有几点不方便的地方:1.在不改变 channel 自身状态的情况下,无法获知一个 channel 是否关闭。2
- django-admin基本介绍Django 提供了基于 web 的管理工具。Django 自动管理工具是 django.contrib 的
- 需求:给定一个dataframe和一个list,list中存放的是dataframe中某一列的元素,删除dataframe中与list元素重
- 这篇文章主要介绍了python 上下文管理器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 关于带权随机数为了帮助理解,先来看三类随机问题的对比:1.已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管。实现思路:按行遍历所有
- 运算符优先级来确定条件的表达式中的分组。这会影响一个表达式如何计算。某些运算符的优先级高于其他;例如,乘法运算符的优先级比加法运
- 1. 基础缩略图给a标签添加类class="thumbnail"如下:<div class="