Flask中的session詳細用法教程
session 是基於cookie實現, 保存在服務端的鍵值對(形式為 {隨機字符串:‘xxxxxx’}), 同時在瀏覽器中的cookie中也對應一相同的隨機字符串,用來再次請求的 時候驗證;
註意 :Flask中的session是存在瀏覽器中 默認key是session(加密的cookie), 也可以像Django一樣基於上述的方式實現保存在數據庫
一、配置SECRET_KEY
因為flask的session是通過加密之後放到了cookie中。所以有加密就有密鑰用於解密,所以,只要用到了flask的session模塊就一定要配置“SECRET_KEY”這個全局宏。一般設置為24位的字符。配置方法一般有兩種。
配置方法一:
新建一個config.py的文件配置secret_key
config.py
SECRET_KEY = 'XXXXXXXXX'
然後在主運行文件裏面添加config文件裏面的內容。
main.py
#encoding: utf-8 from flask import Flask,session import config app = Flask(__name__)
配置方法二:
直接在主運行文件裏面配置。配置config的時候也是和操作字典是一樣的
main.py
encoding: utf-8 from flask import Flask,session app = Flask(__name__) app.config['SECRET_KEY'] = 'XXXXX' 或者隨機數(os.urandom(24)) 或者 app.secret_key = 'why would I tell you my secret key?' key值可以使用隨機數,或者自定義
二、操作session –操作session就如同操作字典!
1.設置session
from flask import Flask,session import os app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) # 設置session @app.route('/') def set(): session['username'] = 'liefyuan' # 設置“字典”鍵值對(正式開發時候,值需要session.get('user')獲取) return 'success' if __name__ == '__main__': app.run()
2.讀取session
?因為session就像字典一樣所以,操作它的時候有兩種方法:
(1)result = session[‘key’] :如果內容不存在,將會報異常
(2)result = session.get(‘key’) :如果內容不存在,將返回None(推薦用法)
所以,使用第二種方法獲取session較好。
from flask import Flask,session import os app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) # 設置session @app.route('/') def set(): session['username'] = 'liefyuan' # 設置“字典”鍵值對 return 'success' # 讀取session @app.route('/get') def get(): # session['username'] # session.get('username') return session.get('username') if __name__ == '__main__': app.run()
3.刪除session
#encoding: utf-8 from flask import Flask,session import os app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) # 設置session @app.route('/') def set(): session['username'] = 'liefyuan' return 'success' # 讀取session @app.route('/get/') def get(): # session['username'] # session.get('username') return session.get('username') # 刪除session @app.route('/delete/') def delete(): print session.get('username') session.pop('username',None) 或者 session['username'] = False print session.get('username') return 'success' if __name__ == '__main__': app.run()
4.清除session中所有數據
#encoding: utf-8 from flask import Flask,session import os app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) # 設置session @app.route('/') def set(): session['username'] = 'liefyuan' return 'success' # 讀取session @app.route('/get') def get(): # session['username'] # session.get('username') return session.get('username') # 刪除session @app.route('/delete') def delete(): print session.get('username') session.pop('username') 或者 session['username'] = False print session.get('username') return 'success' # 清除session中所有數據 @app.route('/clear') def clear(): print session.get('username') # 清除session中所有數據 session.clear print session.get('username') return 'success' if __name__ == '__main__': app.run()
三、設置session的過期時間
?如果沒有指定session的過期時間,那麽默認是瀏覽器關閉後就自動結束。session.permanent = True在flask下則可以將有效期延長至一個月。下面有方法可以配置具體多少天的有效期。
如果沒有指定session的過期時間,那麽默認是瀏覽器關閉後就自動結束
如果設置了session的permanent屬性為True,那麽過期時間是31天。
可以通過給
app.config
設置PERMANENT_SESSION_LIFETIME
來更改過期時間,這個值的數據類型是datetime.timedelay
類型。
使用的需求:
1.在登錄網頁界面,下面有一個“記住我”選項,如果點擊了則設置session的有效期長一點。就是設置這個!
# 設置session @app.route('/') def set(): session['username'] = 'liefyuan' session.permanent = True # 長期有效,一個月的時間有效 return 'success'
一種更先進的配置有效期的方法:(比如配置7天有效)
1.引入包:
from datetime import timedelta
2.配置有效期限:
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
3.設置:
session.permanent = True
#encoding: utf-8 from flask import Flask,session from datetime import timedelta import os app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(24) app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效 # 設置session @app.route('/') def set(): session['username'] = 'liefyuan' session.permanent = True return 'success'
Flask中的session詳細用法教程