Flask笔记:cookie
在网站中,HTTP请求是无状态的:第一次请求成功后,第二次请求时服务器依然不知道这次请求的所属用户是谁。为了解决这个问题,在第一次请求成功后,服务器会生成并返回对应的cookie信息给浏览器,而浏览器在下一次请求同一个网站的时候就会自动(不需要再输入用户名和密码了)将其cookie信息附在请求上,此时服务器根据请求中的cookie信息就知道用户是谁了。
cookie存储的数据量是有限的:虽然不同浏览器会有具体的大小限制,但是一般不会超过4KB(4KB已经算是很大了),因此cookie只能用来存储一些小数据。
cookie有效期:服务器返回cookie个浏览器时需要给cookie设置有效期,当请求中的cookie超过有效期后,此cookie就算作无效的了,如果不设置则有效期会在session结束时自动失效。
设置cookie:使用`from flask import Response`中Response的set_cookie方法
set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None):
- key:cookie的key。
- value:cookie的value。
- max_age:设置cookie保存的时间(秒数),默认为None,表示保存时间与浏览器的session一致。
- expires:设置cookie的有效期,应该传入Python中的`from datetime import datetime`数据类型,或者是一个时间戳。需要注意的是这个参数使用的是格林尼治时间,也就是说我们设置时间时需要在本地时间的基础上减8小时(北京时间与格林尼治时间相差8小时的时间差),在显示时才能显示为我们使用的正确时间,不然显示的时间总是比我们看到的时间多8小时。
- path:设置使用cookie的url路径,默认为该域名下的url都有效。
- domain:设置使用cookie的域名,默认为该请求下的域名,它的子域名是不能使用此cookie的,所以一般跨域名使用cookie时才会用到此参数。比如:主域名为“www.csdn.net”,如果想要子域名“xxx.csdn.net”也能使用此cookie,domain参数就需要设置为“.csdn.net”。
- secure:此参数如果设置为True,则表示此cookie只能在HTTPS请求中才能使用。
- httponly:此参数如果设置为True,则表示不允许JavaScript使用此cookie,注意,此设置可能不是所有的浏览器都支持。
- samesite:限制cookie的使用范围,使其只能在“同一站点”才能使用此cookie。
注:如果同时设置了max_age和expires参数,则以max_age为准,会忽略expires参数。如果这两个参数多没有设置,则和浏览器的session保持一致,即关掉整个浏览器时,session自动结束,cookie也自动失效。
删除cookie:使用Response对象的delete_cookie方法删除对应key值的cookie即可,这个方法其他参数请参考set_cookie方法。
获取cookie:使用request.cookies.get方法即可获取对应的cookie信息。
简单示例:
from datetime import datetime from flask import Flask, Response from views import bp app = Flask(__name__)
app.register_blueprint(bp)
# 主域名和子域名因为没有注册,所以需要在C:\Windows\System32\drivers\etc\hosts文件中配置一下
# 127.0.0.1 hai.com
# 127.0.0.1 hi.hai.com
app.config['SERVER_NAME'] = 'hai.com:5000' @app.route('/')
def hello_world():
resp = Response('Hello World! -- set cookie!')
# 有效期截止到2019-08-31 00:00:00
expire_time = datetime(year=2019, month=8, day=31, hour=16, minute=0, second=0)
# 有效期截止到31天之后
# expire_time = datetime.now() + timedelta(days=30, hours=16)
# expires参数使用的是格林尼治时间,比北京时间多8小时,所有想要显示为北京时间,需要在设置的时间上减8小时
# 同时设置了max_age和expires,则以max_age参数为准,会忽略expires参数。
# .hai.com表示以此为后缀的域名都可用此cookie
resp.set_cookie('username', 'xiaoming', max_age=60, expires=expire_time, domain='.hai.com')
return resp @app.route('/del_cookie/')
def del_cookie():
resp = Response('Hello World! -- delete cookie!')
# 删除cookie中对应key的信息
resp.delete_cookie('username')
return resp if __name__ == '__main__':
app.run(debug=True)
views.py文件:
from flask import Blueprint, request # 新建蓝图对象,用于子域名的访问
bp = Blueprint('hi', __name__, subdomain='hi') @bp.route('/')
def index():
username = request.cookies.get('username')
return 'hi 首页: {}'.format(username)
Flask笔记:cookie的更多相关文章
- flask笔记(三)Flask 添加登陆验证装饰器报错,及解析
Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...
- [py]flask操作cookie&django的seesion和cookie机制
浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...
- flask中cookie和session介绍
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...
- 笔记-cookie参数
笔记-cookie参数 cookie各个参数详解 定义和用法 setcookie()函数向客户端发送一个 HTTP cookie. cookie是由服务器发送到浏览器的变量.cookie 通常是服务器 ...
- flask中cookie和session设置
flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户. ...
- Flask笔记1
Flask笔记 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用. 一个 We ...
- 【Python】Flask系列-cookie和session笔记
cookie: 1.cookie出现的原因:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...
- Python Flask,cookie,session ,设置、获取、删除
使用Response类的set_cookie()方法可以设置cookie: Response.set_cookie( key, //键 value='', //值 max_age=None, //秒为 ...
- flask笔记二
web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...
随机推荐
- 1041. Robot Bounded In Circle
本题题意: 一开始一个机器人站在了(0,0)上,面朝的方向是北,收到三个序列G,L,R. G:直走 L:向左转 R:向右转 按序执行,永远重复. 返回TRUE,如果处在一个圈. 第一个卡住的点: 1. ...
- QT QNetworkAccessManager 如何支持RESTFul的HTTP Patch方法
HTTP Patch方法是除了post,get,put,delete之外的一个新方式, 网上查不到的,也算是独家吧: 主要用下面这个方法: QNetworkReply *sendCustomReque ...
- 使用AVFoundation完成照片拍摄存储相册, 开启关闭闪光灯, 切换摄像头
在开启这个旅程之前, 请记住, AVFoundation是一个复杂的工具. 在很多情况下, 我我们使用苹果默认的API(比如:UIImagePickerController)就足够了. 在您阅读之前, ...
- [20190522]DISABLE TABLE LOCK.txt
[20190522]DISABLE TABLE LOCK.txt --//如果禁止table lock时,一些ddl操作会被禁止.但是我有点吃惊的是增加字段不受限制.--//通过测试说明问题. 1.环 ...
- 获取SpringCloud gateway响应的response的值,记录踩坑
最近在做网关改造,想要通过Gateway过滤器获取ResponseBody的值,查看了网上的帖子和官网内容: 帖子:https://cloud.tencent.com/developer/articl ...
- 第十七章 Metasploit Framework
渗透测试者的困扰▪ 需要掌握数百个工具软件,上千个命令参数,实在记不住▪ 新出现的漏洞PoC/EXP有不同的运行环境要求,准备工作繁琐▪ 大部分时间都在学习使用不同工具的使用习惯,如果能统一就好了▪ ...
- Jinkins自动构建
Jinkins自动构建 1.项目添加 点击左侧操作栏“新建”,填写项目基础信息,如下图: 2. General配置 2.1 丢弃旧的构建 注:此处勾选丢弃旧的构建,默认天数为1,最大个数建议填写3-5 ...
- TransportFireWall
1.shadow for python install on windows (1.) install python pip (2.) install openssl for windows (3.) ...
- Java LinkedList用法
本想找队列Queue,发现那是一个接口,LinkedList实现了Queue接口,可以当作队列来用. 一.概述 Java的LinkedList是一种常用的数据容器,与ArrayList相比,Linke ...
- 全国省市区 json sql 支付宝 2019年9月29日
数据来源: https://docs.alipay.com/isv/10327 链接:https://pan.baidu.com/s/14cQCRzU6QxAvknDrQfhyUA 提取码:baaf ...