详解Flask 中的session 和 cookie的应用

前言

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

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

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

好比登陆淘宝后才能访问本身的购物车,这时候能访问成功就是由于本次请求带上了登陆成功后的 cookie。浏览器

不熟悉的朋友,能够看下我之前写的一篇文章安全

cookie免密登陆了解一下服务器

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

1、cookie

咱们来看下如何在 Flask 中操做 cookie,按照上面的思路,cookie 是从响应中获得的,因此咱们在 Flask 返回的响应中即 make_response 中设置 cookie。session

1.1 设置 cookie

在这里提一下,Flask 将请求相关的都封装在 request 当中, 同理咱们能够经过 make_response 来设置响应相关的数据。app

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.this

设置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 的建立时间和到期时间是同样的。

2、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编程与实战

相关文章
相关标签/搜索