在网站中,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的更多相关文章

  1. flask笔记(三)Flask 添加登陆验证装饰器报错,及解析

    Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...

  2. [py]flask操作cookie&django的seesion和cookie机制

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  3. flask中cookie和session介绍

    flask中cookie和session介绍 一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.co ...

  4. 笔记-cookie参数

    笔记-cookie参数 cookie各个参数详解 定义和用法 setcookie()函数向客户端发送一个 HTTP cookie. cookie是由服务器发送到浏览器的变量.cookie 通常是服务器 ...

  5. flask中cookie和session设置

    flask中cookie和session介绍   一.cookie: 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户. ...

  6. Flask笔记1

    Flask笔记 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用. 一个 We ...

  7. 【Python】Flask系列-cookie和session笔记

    cookie: 1.cookie出现的原因:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...

  8. Python Flask,cookie,session ,设置、获取、删除

    使用Response类的set_cookie()方法可以设置cookie: Response.set_cookie( key, //键 value='', //值 max_age=None, //秒为 ...

  9. flask笔记二

    web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...

随机推荐

  1. C# ZedGraph实时多条曲线数据更新实例

    C# ZedGraph实时多条曲线数据更新实例 先看展示效果 1.创建曲线实例添加必要的元素 public class LineChannel { public LineChannel(int id, ...

  2. 后端返回null,前端怎么处理?数据容错——不用过分相信外部数据

    场景 我们在开发过程当中,总是会遇到因为数据原因,导致使用数组方法或者获取对象属性的时候报错. xxx is not fuction Cannot read property xxxx of unde ...

  3. 「SAP 技术」SAP MM 给合同的ITEM上传附件以及附件查询

    SAP MM 给合同的ITEM上传附件以及附件查询 1,使用事务代码 CV01N为合同上传附件, Document:输入6100000829, Document type 101 (contract) ...

  4. ABP进阶教程7 - 功能按钮

    点这里进入ABP进阶教程目录 下载插件 打开Datatables官网(https://datatables.net/download/) 勾选Extensions/Buttons,下载插件,复制到JD ...

  5. Vue实战狗尾草博客管理平台第四章

    本章主要内容如下: 填补上期的坑. iconfont仓库的关联,引入. 开发登录页面 填坑 上期中我们功能都已正常使用.但不知道有没有小伙伴测试过error页面,当访问地址不存在时,路由是否能正常挑战 ...

  6. 配置oracle的ssl连接

    配置oracle的ssl连接   网上也没有中文资料,我硬着头皮看官方文档肯完,终于配置成功,下面是我配置步骤 配置安全套接层连接oracle 目录 1.        配置简介        1 2 ...

  7. Shell命令-用户用户组管理之useradd、usermod

    文件及内容处理 - useradd.usermod 1. useradd:添加用户 useradd命令的功能说明 useradd 命令用于建立用户帐号.useradd 可用来建立用户帐号.帐号建好之后 ...

  8. python爬虫(2)——urllib、get和post请求、异常处理、浏览器伪装

    urllib基础 urlretrieve() urlretrieve(网址,本地文件存储地址) 直接下载网页到本地 import urllib.request #urlretrieve(网址,本地文件 ...

  9. Firefox 与 geckodriver 版本兼容问题

    打开 python shell,执行以下脚本: from selenium import webdriverdriver = webdriver.Firefox()driver.maximize_wi ...

  10. Linux文件基本命令

    Linux文件基本命令学习 操作技巧: 输入文件/目录/命令的前几个字母之后,按下tab键,则自动补全 按上/下,回滚曾经用过的命令 不想执行命令使用:crtl + c 基础命令: ls(查看) 基础 ...