前言: cookie與session都是常用的會話技術,其目的都是爲了解決短連接及不同請求間的傳值問題。不同的是,cookie的數據由客戶端(即瀏覽器)負責存儲管理,而session由服務端管理。下面對兩種技術分別進行介紹。
一、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
注:
- expires參數設置cookie的過期時間,以秒爲單位,或直接指定具體日期。爲None時表示永不過期。
- flask中cookie支持中文值(通過先編碼,後解碼實現)
- 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時,有兩點需要注意:
- 基於安全考慮,得先設置一個變量值 SECRET_KEY = ‘xxx’,這個值可以自由定義,但不要過於簡單!
- 自帶的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存儲成功'
結果如下:
- 取數據
@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使用手冊