詳解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編程與實戰

相關文章
相關標籤/搜索