flask狀態保持
阿新 • • 發佈:2018-11-24
狀態保持
-
http 是一種無狀態協議,瀏覽器請求伺服器是無狀態的。
- 無狀態:指一次使用者請求時,瀏覽器、伺服器無法知道之前這個使用者做過什麼,每次請求都是一次新的請求。
- 無狀態原因:瀏覽器與伺服器是使用 socket 套接字進行通訊的,伺服器將請求結果返回給瀏覽器之後,會關閉當前的 socket 連線,而且伺服器也會在處理頁面完畢之後銷燬頁面物件。
- 問題:有時需要保持下來使用者瀏覽的狀態。
-
實現狀態保持主要有兩種方式:
- 在客戶端儲存資訊使用Cookie
- 在伺服器端儲存資訊使用Session
無狀態協議:
- 協議對於事務處理沒有記憶能力
- 對同一個 url 請求沒有上下文關係
- 每次的請求都是獨立的,它的執行情況和結果與前面的請求和之後的請求是無直接關係的,它不會受前面的請求應答情況直接影響,也不會直接影響後面的請求應答情況
- 伺服器中沒有儲存客戶端的狀態,客戶端必須每次帶上自己的狀態去請求伺服器
- 人生若只如初見
Cookie
-
Cookie:指某些網站為了辨別使用者身份、進行會話跟蹤而儲存在使用者本地的資料(通常經過加密)。
-
- 複數形式Cookies。
- Cookie最早是網景公司的前僱員Lou Montulli在1993年3月的發明。
- Cookie是由伺服器端生成,傳送給客戶端瀏覽器,瀏覽器會將Cookie的key/value儲存,下次請求同一網站時就傳送該Cookie給伺服器(前提是瀏覽器設定為啟用cookie)。
設定cookie
-
Cookie的key/value可以由伺服器端自己定義。
-
應用:判定註冊使用者是否已經登入網站、廣告推送、購物車
-
注意:
-
Cookie是儲存在瀏覽器中的一段純文字資訊,建議不要儲存敏感資訊如密碼,因為電腦上的瀏覽器可能被其它人使用
-
Cookie基於域名安全,不同域名的Cookie是不能互相訪問的
<瀏覽器同源策略> -
如訪問itcast.cn時向瀏覽器中寫了Cookie資訊,使用同一瀏覽器訪問baidu.com時,無法訪問到itcast.cn寫的Cookie資訊
-
當瀏覽器請求某網站時,會將本網站下所有Cookie資訊提交給伺服器,所以在request中可以讀取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 = ‘ipython’ secret_key的作用:https://segmentfault.com/q/1010000007295395