详解Flask中session与cookie的用法

简介: 详解Flask中session与cookie的用法

640.jpg

阅读文本大概需要 6 分钟。

前言

做过爬虫的朋友相信对 session 和 cookie 这两个东西非常的熟悉了,简单点说 cookie 是客户端用来标识用户信息的,session 是一种会话机制,

首先我们要对 cookie 的整个流程有个清晰的认知:做过爬虫的都知道浏览器向服务器发起某个登录请求,登录成功后的 Response Headers 中就有了 cookie 。

那么这个 cookie 就是从服务器生成并返回给浏览器的,接着登录后的用户才能访问其他页面。

比如登录淘宝后才能访问自己的购物车,这时候能访问成功就是因为本次请求带上了登录成功后的 cookie。

不熟悉的朋友,可以看下我以前写的一篇文章

那么问题来了我们如何在服务器或者说后台设置 cookie 和 session 呢?

一、cookie

我们来看下如何在 Flask 中操作 cookie,按照上面的思路,cookie 是从响应中得到的,所以我们在 Flask 返回的响应中即 make_response 中设置 cookie。

1.1 设置 cookie

在这里提一下,Flask 将请求相关的都封装在 request 当中, 同理我们可以通过 make_response 来设置响应相关的数据。

    from flask import Flask, make_response
    app = Flask(__name__)
    @app.route('/set_cookie')def hello_world():    resp = make_response("success")    resp.set_cookie("name", "python")    resp.set_cookie("name2", "go")    return resp

    上面代码设置了两个 cookie,设置完之后,我们启动服务然后通过浏览器来访问该地址,按下 F12 之后就能看到你设置的 cookie.

    640.png

    设置cookie

    可以看到响应头中的 cookie, 浏览器会自动将其保存下来,在你下次访问的时候会带上这两个 cookie 。

    我们用下面的代码来验证下:

      from flask import request
      @app.route("/index")def index():    cookie = request.cookies    return f" this is {cookie}"

      启动之后,访问 http://127.0.0.1:5000/index

      640.jpg

      请求头中有 cookie 数据,同时后台能获取到用户的 cookie.

      1.2 cookie 有效期

      cookie 都是有有效期的,细心的朋友应该可以发现上面的 cookie 并没有设置有效期,关闭浏览器后该 cookie 也就失效了

      640.png

      在 set-cookie 中可以用 max_age, expires 来设置 cookie 的有效期,

      其中 max_age 是以秒为单位的,expires 是时间戳或者以 datetime 格式对象数据

      我们可以在上面的 hello_world 中添加第三个 cookie 数据

        @app.route('/set_cookie')def hello_world():    resp = make_response("success")    resp.set_cookie("name", "python")    resp.set_cookie("name2", "go")    resp.set_cookie("name3", "jerry", max_age=7200)    return resp

        同样重启后浏览器中输入地址,查看 cookie


        1.3 删除 cookie640.png

        删除 cookie 用到的方法是 delete_cookie, 我们将需求删除的 cookie 的键传过去即可,

          @app.route('/delete')def delete():    resp = make_response("delete test")    resp.delete_cookie("name")    return resp

          验证结果如下:

          640.png

          删除cookie

          发现没有,name 的创建时间和到期时间是一样的。

          二、session

          session和cookie的作用有点类似,都是为了存储用户相关的信息的,区别在于 session 是保存在服务器端的,用 session_id 来标识用户。而 cookie 是保存在客户端,session 的出现,是为了解决 cookie 存储数据不安全的问题的。

          2.1 设置 session

          在 flask 中我们可以导入 flask.session 来操作 session, 使用方法和 python 中的字典差不多

            from flask import session
            @app.route("/login")def login():    session["name"] = "jerry"    session["account"] = "python"    return "success"

            注意处理 session 的时候,需要设置 SECRET_KEY,因为 flask 要用该值来对 session 进行加密和混淆 。

              class Config(object):    SECRET_KEY = "DJFAJLAJAFKLJQ"
              app.config.from_object(Config())

              2.2 获取 session

              和字典用法类似,可以用 get 方法 或者直接取值

                @app.route("/index")def index():    name = session.get("name")    return f" hello {name}"

                2.3 删除 session

                  session.pop("name")del session["name"]session.clear()

                  其中 clear() 直接将 session 全部清空。

                  以上便是今天的全部内容,希望各位看官喜欢。

                  640.png

                  相关文章
                  |
                  2天前
                  |
                  存储 安全 Java
                  JavaWeb中的Session和Cookie
                  本文介绍了JavaWeb中的会话跟踪技术,主要讨论了Cookie和Session的概念、用途、设置与获取方法以及生命周期。Cookie是客户端技术,用于在用户浏览器中存储信息,通常用于保持用户登录状态,有效期可设置。Session则保存在服务器端,用于跟踪用户状态,例如登录信息,生命周期可通过设置最大不活动时间控制。两者之间的主要区别在于数据存储位置和安全性,Cookie数据在客户端,可能存在安全风险,而Session数据在服务器端,相对较安全但会占用服务器资源。
                  |
                  6天前
                  |
                  存储 搜索推荐 安全
                  【Cookie和Session辨析】
                  【Cookie和Session辨析】
                  10 2
                  |
                  12天前
                  |
                  存储 缓存 安全
                  【PHP开发专栏】PHP Cookie与Session管理
                  【4月更文挑战第30天】本文介绍了PHP中的Cookie和Session管理。Cookie是服务器发送至客户端的数据,用于维持会话状态,可使用`setcookie()`设置和`$_COOKIE`访问。Session数据存于服务器,更安全且能存储更多数据,通过`session_start()`启动,`$_SESSION`数组操作。根据需求选择Cookie(跨会话共享)或Session(单会话存储)。实战中常组合使用,如Cookie记住登录状态,Session处理购物车。理解两者原理和应用场景能提升Web开发技能。
                  |
                  16天前
                  |
                  存储 安全 前端开发
                  禁用Cookie后Session还能用吗?
                  禁用Cookie后Session还能用吗?
                  24 1
                  |
                  16天前
                  |
                  Java
                  Cookie和Session
                  Cookie和Session
                  19 0
                  |
                  27天前
                  |
                  存储 JSON 安全
                  |
                  1月前
                  |
                  存储 前端开发 数据安全/隐私保护
                  网站开发--Cookie 和 Session 的工作流程
                  网站开发--Cookie 和 Session 的工作流程
                  18 0
                  |
                  Python
                  小白学Flask第七天| 讲讲cookie和session的操作
                  小白学Flask第七天| 讲讲cookie和session的操作
                  171 0
                  小白学Flask第七天| 讲讲cookie和session的操作
                  |
                  1月前
                  |
                  JSON API 数据格式
                  构建RESTful APIs:使用Python和Flask
                  【4月更文挑战第9天】本文介绍了如何使用Python的Flask框架构建RESTful API。Flask是一个轻量级的Web应用框架,适合小型项目和微服务。首先,确保安装了Python和Flask,然后通过创建基本的Flask应用开始。接着,定义资源和路由,例如为“图书”资源创建GET、POST、PUT和DELETE方法的路由。使用`request`对象处理客户端数据,`jsonify`生成JSON响应。错误处理通过返回错误信息和相应HTTP状态码完成。最后,运行并测试API,发现Flask提供了一种简单高效的方式来构建RESTful APIs。
                  |
                  1月前
                  |
                  安全 数据库 C++
                  Python Web框架比较:Django vs Flask vs Pyramid
                  【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。