Flask中的session cookie:是一種保存數據的格式,也可以看成是保存數據的一個“盒子”,伺服器返回cookie給瀏覽器(由伺服器產生),由瀏覽器保存在本地,下次再訪問此伺服器時瀏覽器就會自動將此cookie一起發送給伺服器。 session:也是一種保存數據的格式,也可以看成是保存數據 ...
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)。