Flask之初學者(六)
Flask中的session
cookie:是一種保存數據的格式,也可以看成是保存數據的一個“盒子”,服務器返回cookie給瀏覽器(由服務器產生),由瀏覽器保存在本地,下次再訪問此服務器時瀏覽器就會自動將此cookie一起發送給服務器。
session:也是一種保存數據的格式,也可以看成是保存數據的“盒子”,和cookie幾乎是“同生共長”的,同cookie不同的是,session是保存在服務器中的。服務器通過cookie返回給瀏覽器session的相關信息(比如session的id),瀏覽器通過cookie將session的信息發送給服務器,服務器通過收到的cookie中的session信息來驗證訪問者的信息。
cookie和session之間的關系:一般來說,session中保存有敏感數據(這些數據會進行加密後保存),但是這些數據並不會發送到瀏覽器中去,而是通過瀏覽器發送來的cookie中的session的id來進行驗證並使用這些敏感數據;同時session是可以設置過期時間的,到時間後就可以刪除服務器中session的數據了,當瀏覽器中cookie中的session在服務器中找不到時,服務器會重新要求瀏覽器進行驗證並生成新的session。
Flask中的session機制:session不是存放在服務器中的,而是將敏感數據進行加密後存放進session中,再將session放入cookie中返回給客戶端(瀏覽器),下次瀏覽器訪問服務器時,服務器從瀏覽器發送來的cookie中獲取session,並將session中敏感數據解密後獲取用戶的數據。flask的這種session機制優點是可以節省服務器的開銷。(如果使用的是谷歌瀏覽器,可以在“高級”-“隱私設置和安全性”-“內容設置”-“Cookie”-“查看所有Cookie和網站數據”找到對應網址的cookie,可以發現cookie中有命令session的數據,表明session確實是存放在瀏覽器的cookie中的)
Flask的session操作(from flask import session):
1. 需要配置SECRET_KEY,值為包含24個字符的字符串(一般為隨機字符串),使用“app.config[‘param_name‘]=value”的形式或者在配置文件中配置即可(註意:重啟服務器後這個值改變了的話就獲取不到之前設置的session了)。
2. session可以看做是一個字典,session的增刪改查操作跟字典的操作(包括使用的函數)是一樣的。
3. session過期時間設置:flask的session過期時間如果沒有設置,那麽默認就是瀏覽器回話結束(即關閉瀏覽器時)後自動過期,session的過期時間是由“session.permanent=True”指定,這時候會去讀取配置中的“PERMANENT_SESSION_LIFETIME”的值(datetime.timedelta類型),這個值如果沒有設置則默認是31天,也可以在配置中自己設置這個值,比如設置為7天:PERMANENT_SESSION_LIFETIME=datetime.timedelta(days=7)。
Flask之初學者(六)