美文网首页学习提升Python
详解Flask 中的session 和 cookie的应用

详解Flask 中的session 和 cookie的应用

作者: GoPython | 来源:发表于2020-02-16 10:47 被阅读0次

    前言

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

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

    那么这个 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.

    设置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

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

    1.2 cookie 有效期

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

    在 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 删除 cookie

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

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

    验证结果如下:

    删除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 全部清空.

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

    了解更多内容,烦请关注公众号 Python编程与实战

    相关文章

      网友评论

        本文标题:详解Flask 中的session 和 cookie的应用

        本文链接:https://www.haomeiwen.com/subject/tokpfhtx.html