Flask 框架的 狀態保持
Flask 的狀態保持有兩種 :一種是 cookie 另一種是:session。
Cookie:指某些網站為了辨別使用者身份、進行會話跟蹤而儲存在使用者本地的資料(通常經過加密)。
複數形式Cookies。
Cookie最早是網景公司的前僱員Lou Montulli在1993年3月的發明。
Cookie是由伺服器端生成,傳送給客戶端瀏覽器,瀏覽器會將Cookie的key/value儲存,下次請求同一網站時就傳送該Cookie給伺服器(前提是瀏覽器設定為啟用
Cookie的key/value可以由伺服器端自己定義。
應用:
最典型的應用是判定註冊使用者是否已經登入網站,使用者可能會得到提示,是否在下一次進入此網站時保留使用者資訊以便簡化登入手續,這些都是Cookie的功用。
網站的廣告推送,經常遇到訪問某個網站時,會彈出小視窗,展示我們曾經在購物網站上看過的商品資訊。
購物車,使用者可能會在一段時間內在同一家網站的不同頁面中選擇不同的商品,這些資訊都會寫入Cookie,以便在最後付款時提取資訊。
提示:
Cookie是儲存在瀏覽器中的一段純文字資訊,建議不要儲存敏感資訊如密碼,因為電腦上的瀏覽器可能被其它人使用
Cookie基於域名安全,不同域名的Cookie是不能互相訪問的
如訪問itcast.cn時向瀏覽器中寫了Cookie資訊,使用同一瀏覽器訪問baidu.com時,無法訪問到itcast.cn寫的Cookie資訊
瀏覽器的同源策略
當瀏覽器請求某網站時,會將本網站下所有Cookie資訊提交給伺服器,所以在request中可以讀取Cookie資訊
設定cookie
from flask imoprt Flask,make_response
@app.route('/cookie')
def set_cookie():
resp = make_response('this is to set cookie')
resp.set_cookie('username', 'itcast')
return resp
設定過期時間
@app.route('/cookie')
def set_cookie():
response = make_response('hello world')
response.set_cookie('username', 'itheima', max_age=3600)
return response
獲取cookie
from flask import Flask,request
#獲取cookie
@app.route('/request')
def resp_cookie():
resp = request.cookies.get('username')
return resp
Session
對於敏感、重要的資訊,建議要儲存在伺服器端,不能儲存在瀏覽器中,如使用者名稱、餘額、等級、驗證碼等資訊
在伺服器端進行狀態保持的方案就是Session
Session依賴於Cookie
session資料的獲取
session:請求上下文物件,用於處理http請求中的一些資料內容
@app.route('/index1')
def index1():
session['username'] = 'itcast'
return redirect(url_for('index'))
@app.route('/')
def index():
return session.get('username')
記得設定secret_key: app.secret_key = 'itheima'