淺談Flask中的cookie與session

前言: cookie與session都是常用的會話技術,其目的都是爲了解決短連接不同請求間的傳值問題。不同的是,cookie的數據由客戶端(即瀏覽器)負責存儲管理,而session由服務端管理。下面對兩種技術分別進行介紹。

一、cookie

上面說到,cookie是存儲在客戶端的,那這存儲的數據從何而來呢?答案是從服務器來的,即在一次正確的請求響應後,服務器返回一個響應對象,其中就設置了cookie。
cookie設置
瞭解了cookie的設置原理,那在python中如何實現呢?這在flask中十分簡單,往下看:

  • 設置cookie
from flask import Flask, Response

app = Flask(__name__)

@app.route('/set-cookie')
def set_cookie():
    resp = Response(response='設置cookie') #實例化返回對象
    resp.set_cookie('name','cookie',expires=None) #設置cookie
    return resp

注:

  1. expires參數設置cookie的過期時間,以秒爲單位,或直接指定具體日期。爲None時表示永不過期。
  2. flask中cookie支持中文值(通過先編碼,後解碼實現)
  3. cookie不可跨域名和瀏覽器!
  • 獲取cookie
from flask import Flask, request

app = Flask(__name__)

@app.route('/get-cookie')
def get_cookie():
    name = request.cookies.get('name') #根據鍵名獲取cookie值
    return '剛纔設置的cookie值爲%s'%name
  • 刪除cookie
@app.route('/delete-cookie')
def delete_cookie():
    resp = redirect(url_for('login')) #實例化響應對象,轉移到其他頁面
    resp.delete_cookie('name') #根據鍵名刪除
    return resp

二、session

在flask中,使用session時,有兩點需要注意:

  1. 基於安全考慮,得先設置一個變量值 SECRET_KEY = ‘xxx’,這個值可以自由定義,但不要過於簡單!
  2. 自帶的session依賴於cookie存在,創建後,加密後的session id會被存到cookie中,數據存到內存中。

注:session的本質是一個字典,所以其操作與一般字典操作相同,使用方法如下:

  • 存儲數據
from flask import Flask,session

app = Flask(__name__)

app.config['SECRET_KEY'] = 'sldfjlglgjoek434l3lkj9798'   #設置SECRET_KEY

@app.route('/session-save')
def session_save():
    session['username'] = 'session' #存儲數據
    return 'session存儲成功'

結果如下:
session存儲

  • 取數據
@app.route('/session-get')
def session_get():
    username = session.get('username')  #取數據
    return '歡迎你:%s'%username
  • 刪除數據
@app.route('/session-delete')
def session_delete():
    session.pop('username')
    return 'username刪除成功'

三、總結

 在flask中,cookie與session的操作相對簡單,但原生的session存儲方式單一,且風險較大。
解決辦法:使用flask-session插件,用 redis 進行緩存或其他方式存儲。具體使用:請查看flask-session使用手冊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章