Flask session 概念解釋:
session 是基于cookie實(shí)現(xiàn)殖蚕, 保存在服務(wù)端的鍵值對(duì)(形式為 {隨機(jī)字符串:‘xxxxxx’}), 同時(shí)在瀏覽器中的cookie中也對(duì)應(yīng)一相同的隨機(jī)字符串猿棉,用來(lái)再次請(qǐng)求的 時(shí)候驗(yàn)證银舱;
注意 :Flask中的session是存在瀏覽器中 默認(rèn)key是session(加密的cookie), 也可以像Django一樣基于上述的方式實(shí)現(xiàn)保存在數(shù)據(jù)庫(kù)
一判耕、配置SECRET_KEY
因?yàn)閒lask的session是通過(guò)加密之后放到了cookie中透绩。所以有加密就有密鑰用于解密,所以壁熄,只要用到了flask的session模塊就一定要配置“SECRET_KEY”這個(gè)全局宏帚豪。一般設(shè)置為24位的字符。配置方法一般有兩種请毛。
配置方法一:
新建一個(gè)config.py的文件配置secret_key
config.py
SECRET_KEY = 'XXXXXXXXX'
然后在主運(yùn)行文件里面添加config文件里面的內(nèi)容志鞍。
main.py
#encoding: utf-8
from flask import Flask,session
import config
app = Flask(__name__)
配置方法二:
直接在主運(yùn)行文件里面配置瞭亮。配置config的時(shí)候也是和操作字典是一樣的
main.py
encoding: utf-8
from flask import Flask,session
app = Flask(__name__)
app.config['SECRET_KEY'] = 'XXXXX' 或者隨機(jī)數(shù)(os.urandom(24))
或者
app.secret_key = 'why would I tell you my secret key?'
key值可以使用隨機(jī)數(shù)方仿,或者自定義
二、操作session –操作session就如同操作字典统翩!
1.設(shè)置session
from flask import Flask,session
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
# 設(shè)置session
@app.route('/')
def set():
session['username'] = 'liefyuan' # 設(shè)置“字典”鍵值對(duì)(正式開(kāi)發(fā)時(shí)候仙蚜,值需要session.get('user')獲取)
return 'success'
if __name__ == '__main__':
app.run()
2.讀取session
因?yàn)閟ession就像字典一樣所以厂汗,操作它的時(shí)候有兩種方法:
(1)result = session[‘key’] :如果內(nèi)容不存在委粉,將會(huì)報(bào)異常
(2)result = session.get(‘key’) :如果內(nèi)容不存在,將返回None(推薦用法)
所以娶桦,使用第二種方法獲取session較好贾节。
from flask import Flask,session
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
# 設(shè)置session
@app.route('/')
def set():
session['username'] = 'liefyuan' # 設(shè)置“字典”鍵值對(duì)
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)
# 設(shè)置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中所有數(shù)據(jù)
#encoding: utf-8
from flask import Flask,session
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
# 設(shè)置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中所有數(shù)據(jù)
@app.route('/clear')
def clear():
print session.get('username')
# 清除session中所有數(shù)據(jù)
session.clear
print session.get('username')
return 'success'
if __name__ == '__main__':
app.run()
三汁汗、設(shè)置session的過(guò)期時(shí)間
如果沒(méi)有指定session的過(guò)期時(shí)間,那么默認(rèn)是瀏覽器關(guān)閉后就自動(dòng)結(jié)束栗涂。session.permanent = True在flask下則可以將有效期延長(zhǎng)至一個(gè)月知牌。下面有方法可以配置具體多少天的有效期。
如果沒(méi)有指定session的過(guò)期時(shí)間斤程,那么默認(rèn)是瀏覽器關(guān)閉后就自動(dòng)結(jié)束
如果設(shè)置了session的permanent屬性為True角寸,那么過(guò)期時(shí)間是31天。
可以通過(guò)給
app.config
設(shè)置PERMANENT_SESSION_LIFETIME
來(lái)更改過(guò)期時(shí)間忿墅,這個(gè)值的數(shù)據(jù)類型是datetime.timedelay
類型扁藕。
使用的需求:
- 1.在登錄網(wǎng)頁(yè)界面,下面有一個(gè)“記住我”選項(xiàng)疚脐,如果點(diǎn)擊了則設(shè)置session的有效期長(zhǎng)一點(diǎn)亿柑。就是設(shè)置這個(gè)!
# 設(shè)置session
@app.route('/')
def set():
session['username'] = 'liefyuan'
session.permanent = True # 長(zhǎng)期有效棍弄,一個(gè)月的時(shí)間有效
return 'success'
一種更先進(jìn)的配置有效期的方法:(比如配置7天有效)
1.引入包:
from datetime import timedelta
2.配置有效期限:
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # 配置7天有效
3.設(shè)置:
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天有效
# 設(shè)置session
@app.route('/')
def set():
session['username'] = 'liefyuan'
session.permanent = True
return 'success'## 目標(biāo)