1. 程式人生 > >Flask中的session詳細用法教程

Flask中的session詳細用法教程

添加 不存在 lin 字符 days 註意 family 服務 鍵值

**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詳細用法教程