Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flask Cookie和Session的使用

Flask Cookie和Session的使用

作者头像
忆想不到的晖
发布于 2021-12-06 12:02:54
发布于 2021-12-06 12:02:54
1K00
代码可运行
举报
文章被收录于专栏:huihui
运行总次数:0
代码可运行

Cookie和Session的概念

Cookie

在网站中,http 请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie 的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会把上次请求存储的cookie 数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前是哪个用户了。 cookie 存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过 4kb。 因此使用 cookie 只能存储一些小量的数据。

Session

session 和 cookie 的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie 是存储在本地浏览器,而 session 存储在服务器。 存储在服务器的数据会更加安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,存储一些 session 信息还是绰绰有余的。

cookie 和 session 结合使用:cookie 和 session 的使用已经出现了一些非常成熟的方案。一般有两种存储方式

  • 存储在服务端:通过 cookie 存储一个 session_id,然后具体的数据则保存在 session 中。如果用户已经登录,则服务器会在 cookie 中保存一个 session_id,下次再请求的时候,会把该 session_id 携带上,服务器根据session_id 在 sesson 库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做 server side session.
  • 将 session 数据加密,然后存储在cookie中。这种专业术语叫做 client side session。Flask采用的就是这种方式,但是也可以替换成其它方式。

Cookie的使用

在 Flask 中利用 make_response() 函数创建出来的 Response 对象就可以对 Cookie 进行相关操作

Response对象的 set_cookie() 方法参数详情

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def set_cookie(
        self,
        key,
        value="",
        max_age=None,	
        expires=None,
        path="/",
        domain=None,
        secure=False,
        httponly=False,
        samesite=None,
    ):

常用参数说明

  • key cookie的键
  • value cookie的值
  • max_age 设置 cookie 存储多久 单位秒,默认则是一次浏览器会话,关闭浏览器就没有了。
  • expires 设置 cookie 过期日期,必须是一个 datetime 对象类型或者 UNIX 时间戳
  • path 限制cookie到一个给定的路径,默认情况下它将属于整个域名

如果 max_ageexpires 都设置了,则以 max_age 参为准 若没有设置过期时间,则默认为浏览会话结束,即关闭浏览器(是关闭浏览器,不是关闭页面)时过期

Cookie的设置与获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask, make_response, request

app = Flask(__name__)


# 设置Cookie
@app.route("/set_cookie")
def set_cookie():
    resp = make_response('success')

    resp.set_cookie("name", "hui")
    resp.set_cookie("age", "21")

    return resp

# 获取Cookie
@app.route("/get_cookie")
def get_cookie():
    name = request.cookies.get("name")
    age = request.cookies.get("age")

    resp = f"name={name}, age={age}"
    return resp


if __name__ == "__main__":
    app.run()

使用 make_response() 函数来创建 Response 响应对象,然后使用 set_cookie() 方法设置cookie数据

获取 Cookie 则是用 request.cookies.get()

设置过 Cookie 了,下次请求浏览器会自动携带 Cookie 信息。因此在request.cookies 获取cookie信息

查看Cookie过期时间

Cookie设置过期时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from datetime import datetime, timedelta
from flask import Flask, make_response, request

app = Flask(__name__)


@app.route("/set_expires")
def set_cookie_expires():
    resp = make_response("设置cookie过期时间")

    # 设置1分钟后过期
    resp.set_cookie("sex", "male", max_age=60)

    # 设置一天后过期
    expires_date = datetime.now() + timedelta(days=1, hours=-8)
    resp.set_cookie("city", "GanZhou", expires=expires_date)

    return resp

如果使用 expires,浏览器则会默认使用 格林尼治 时间,即在设置的时间自动 +8小时,因此我们在设置过期时间时需要减掉这8小时才符号我们的预期。 datetime 对象在进行时间间隔运算不能直接加减要借助 timedelta

删除Cookie

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask, make_response

app = Flask(__name__)


@app.route("/del_cookie")
def del_cookie():
    resp = make_response("del cookie")
    resp.delete_cookie("name")
    return resp

其删除 cookie 其实就是把过期设置成 max_age=0, expires=0

看看 Flask 源码,就可得知

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def delete_cookie(self, key, path="/", domain=None):
        """Delete a cookie.  Fails silently if key doesn't exist.

        :param key: the key (name) of the cookie to be deleted.
        :param path: if the cookie that should be deleted was limited to a
                     path, the path has to be defined here.
        :param domain: if the cookie that should be deleted was limited to a
                       domain, that domain has to be defined here.
        """
        self.set_cookie(key, expires=0, max_age=0, path=path, domain=domain)

Session的使用

Session的设置与获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
Author: Hui
Desc: { Flask session的使用 }
"""
from flask import Flask, session

app = Flask(__name__)
app.config["SECRET_KEY"] = "it hui"


# flask默认吧session保存在cookie中
@app.route("/index")
def index():
    name = session.get("name")
    return "hello {}".format(name)


@app.route("/login")
def login():
    session["name"] = "hui"
    return "set session name"


if __name__ == "__main__":
    app.run()

设置session时记得添加密钥配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.SECRECT_KEY = "it hui"

如不设置则会报如下错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RuntimeError: The session is unavailable because no secret key was set.  Set the secret_key on the application to something unique and secret.

测试上面的程序,先访问 127.0.0.1:5000/index

然后访问 127.0.0.1:5000/login 设置 session

然后再访问 127.0.0.1:5000/index 看看

Flask 默认把 session 保存在 cookie

当前设置了一个 keyname 的,值为 huisession 信息,来查看浏览器 Cookie 信息

只是 session 信息内容被加密了,因为要用到 SECRET_KEY 信息来加密 session 信息, 所以设置 session 时要设置密钥 SECRET_KEY因为 Flask 的 session 信息存储在本地 cookie 中,是可以被篡改的,为了保证安全性,一旦被修改,Flask 则认为这是一个无效的 session 信息

Session设置过期时间

Flask的 session 默认过期时为会话结束,如果开启会话过期时间(session.permanent=True),默认过期时间为 一个月,可以通过 permanent_session_lifetime Flask的配置信息来设置 session 的过期时间

从Flask源码就可得知

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#: This attribute can also be configured from the config with the
    #: ``PERMANENT_SESSION_LIFETIME`` configuration key.  Defaults to
    #: ``timedelta(days=31)``
    permanent_session_lifetime = ConfigAttribute(
        "PERMANENT_SESSION_LIFETIME", get_converter=_make_timedelta
    )

设置过期时间使用 timedelta 对象

设置了 session.permanent = True

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
Author: Hui
Desc: { Flask session的使用 }
"""
from datetime import timedelta
from flask import Flask, session

app = Flask(__name__)
app.config["SECRET_KEY"] = "it hui"

# 设置session过期时间
app.permanent_session_lifetime = timedelta(seconds=60)


# flask默认把session保存在cookie中
@app.route("/index")
def index():
    name = session.get("name")
    age = session.get("age")
    return f"name={name}, age={age}"


@app.route("/age")
def set_session():
    session["age"] = 21
    return "set session age"


@app.route("/login")
def login():
    session["name"] = "hui"
    session.permanent = True
    return "set session name"


if __name__ == "__main__":
    app.run()

指定 session 过期时间为1分钟

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.permanent_session_lifetime = timedelta(seconds=60)

删除session

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@app.route("del_session")
def del_session():
    session.pop("name")
    # session.clear() # 删除session所有信息
    return "del session name"

源代码

源代码已上传到 Gitee HuiDBK/FlaskBasic - 码云 - 开源中国 (gitee.com),欢迎大家来访。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
9.Flask Cookie和Session
cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前是哪个用户了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4kb。因此使用cookie只能存储一些小量的数据。
zhang_derek
2018/08/30
1K0
Flask|设置Cookie和Session
Cookie是一个简单的保存在本地的文本文件,这个文件与特定的Web文档关联在一起,保存了一些该浏览器访问这个Web文档时的信息,当再次访问的时候这些信息可以继续拿出来使用。一般来说,Cookie的大小不超过4kb。由名称、值和其他几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
算法与编程之美
2020/03/31
3K0
Flask|设置Cookie和Session
Flask 学习-93.cookie 有效期设置
flask 框架设置cookie,如果没有指定过期时间,那么cookie 将会在浏览器关闭后过期。
上海-悠悠
2023/01/03
1K0
Flask 学习-93.cookie 有效期设置
会话控制 COOKIE 与 SESSION
会话控制 用来保持用户的状态 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案
星哥玩云
2022/09/14
4150
详解Flask中session与cookie的用法
做过爬虫的朋友相信对 session 和 cookie 这两个东西非常的熟悉了,简单点说 cookie 是客户端用来标识用户信息的,session 是一种会话机制,
Python编程与实战
2020/03/04
4.3K0
详解Flask中session与cookie的用法
Flask 学习-62.Cookies 设置与使用
前言 Cookie 是保存到客户端的,用户通过浏览器访问网站保存到本地,Flask 通过Response将cookie写到浏览器上,下一次访问,浏览器会根据网站域名(或IP_携带cookie过来. Flask 中处理cookies 在Flask中对cookie的处理主要有3个方法 set_cookie设置cookie,默认有效期是临时cookie,浏览器关闭就失效可以通过 max_age 设置有效期, 单位是秒 resp = make_response("success") # 设置响应体 res
上海-悠悠
2022/09/14
1.4K0
Flask 学习-62.Cookies 设置与使用
Flask cookie的使用
在web项目中,设置cookie和session是基本必不可少的一个功能,而Flask设置cookie是使用make_response返回响应信息的时候设置的。 下面来看看Flask框架设置cookie的基本用法。
Devops海洋的渔夫
2019/12/16
9480
Flask cookie的使用
Flask入门
本文参考博客:https://blog.csdn.net/xiaoyuan511?t=1 Flask是轻量级的Web开发框架,只具备基本的核心内容-->视图和路由,其他的功能都需要第三方或者自己手写
py3study
2020/01/16
4960
小白学Flask第七天| 讲讲cookie和session的操作
cookie和session都是web开发当中老生常谈的话题,我们首先来看看Flask当中cookie是如何使用的。
Python进击者
2019/09/05
6620
小白学Flask第七天| 讲讲cookie和session的操作
盘点Python网页开发轻量级框架Flask知识(上篇)
今天来给大家说一个Python的轻量级web开发框架-------Flask,为什么要推荐它呢?当然是因为它够轻量级了,开发迅速是它的特点,当然它也有缺点,不过这里不说,因为既用它又说它差感觉不好。
Python进阶者
2021/07/02
7190
Flask 学习-63.Session 使用
前言 Session是在 cookies 的基础上实现的,并且在 cookies 中使用加密的签名。这意味着用户可以查看 cookie 的内容, 但是不能修改它,除非它知道签名的密钥。 要使用会话,你需要设置一个密钥 SECRET_KEY 配置SECRET_KEY 1.使用固定的SECRET_KEY from flask import Flask,session app = Flask(__name__) app.config['SECRET_KEY'] = 'xxxxx' # 自己设置一个 2.使用随
上海-悠悠
2022/09/14
4770
Flask 学习-63.Session 使用
Python Web - Flask笔记7
Flask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。要使用Flask-Script,可以通过pip install flask-script安装。
YingJoy_
2018/08/02
1.1K0
Flask中的cookie和session
详细可以参照:https://www.cnblogs.com/pythonywy/p/11594420.html
小小咸鱼YwY
2020/06/19
5660
flask的cookie和session
  在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例
py3study
2020/02/10
4200
flask源码阅读笔记(2)-session相关
基于代码可看出,flask的session是基于cookie实现的,这样可以实现不同请求间存储特定用户的信息,实现用户状态的保持。
皮皮熊
2018/07/17
6040
python3+flask 开发web(一)
2)安装python ide,pycharm:https://www.jetbrains.com/pycharm/
用户7886150
2020/12/30
5010
【Python Web实战】Flask中的用户跟踪技术(Response与Cookie)
我们已经知道,路由函数的返回值会作为HTTP响应信息返回给客户端。不过如果要对HTTP响应信息做更复杂的操作,如设置HTTP响应头,就需要获得HTTP响应对象,也就是Response对象。
蒙娜丽宁
2021/04/19
9130
【Python Web实战】Flask中的用户跟踪技术(Response与Cookie)
flask中cookie和session介绍
在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
AiDBA宝典
2019/09/29
5370
flask中cookie和session介绍
Flask快速入门,知识整理
一、Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来)   Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。 “微”(mic
用户1214487
2018/01/24
2.1K0
Flask快速入门,知识整理
Flask路由&视图
在浏览器访问127.0.0.1:5000/func1和 127.0.0.1:5000/func2,返回的结果都是func。
py3study
2020/01/16
7750
相关推荐
9.Flask Cookie和Session
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档