天天看點

Flask-中session的工作機制和session操作

1.把敏感的資料經過加密後放入session中,然後在把session存放到cookie中,下次請求的時候,再從浏覽器發送過來的cookie中讀取session,
然後再從session中讀取敏感資料,并進行解密,擷取最終的使用者資料
2.flask的這種session,*可以節省伺服器的開銷,因為把所有資訊都存放到了用戶端*(浏覽器)
           
falsk中使用cookie和session
1.cookies:在flask中操作cookie 是通過response對象來操作,可以在response傳回之前,通過response.set_cookie來設定,這個方法有一下
幾個參數需要注意:
	*key:設定的cookie的key
	*value:key對應的value
	*max_age:改cookie的過期時間,如果不設定,則浏覽器關閉後就會自動過期。
	*expires:過期時間,應該是一個datetime類型
	*domain:該cookie在哪個域名中有效.一般設定子域名,比如cms.example.com
	*path:該cookie在哪個路徑下有效。
2.session:Flask中的sessipn是通過from falsk import session 然後添加值key和value進去即可。并且,falsk中的session機制是将
session資訊假面,然後存儲在cookie 中。專業術語叫做client side session
	1.使用session需要從flask中導入session,以後所有和session相關操作都是通過這個變量來的
	2.使用session需要設定SECRET_KEY,用來作為加密用的。并且這個SECRET_KEY如果每次伺服器啟動後都變化的話,那麼值錢的session就不能
	通過目前這個SECRET_KEY進行解密了
	*操作session的時候,跟操作字典是一樣的。
	*添加session:session['username']
	*删除session:session.pop('username')或者del session['username']
	*清除所有session:session.clear()
	*擷取session:session.get('username')
3.設定session的過期時間:
	如果沒有指定session 的過期時間,那麼預設是浏覽器關閉後自動結束
	如果設定了session的permanent屬性為True,那麼過期時間是31天。
	可以通過給app.config設定PERMANENT_SESSION_LIFETIME來更改過期時間這個值的資料類型是datetime.timedelay類型
           
from flask import Flask,session
import os
from datetime import timedelta
app = Flask(__name__)
#設定config的時候隻有一個資料可以用下面這種
#SECRET_KEY的值需要24個字元串->是用來加密用的
app.config['SECRET_KEY']=os.urandom(24)
#設定session的過期時間為7天
app.config['PERMANENT_SESSION_LIFETIME']=timedelta(days=7)
#config中有多個資料才用->app.config.from_object(config)



#添加資料到session中
#操作session的時候,跟操作字典是一樣的

@app.route('/')
def hello_world():
    session['username']='miracle'
    # 如果沒有設定session的過期時間,那麼預設是浏覽器關閉後就自動結束
    # 如果設定了session的permanent屬性為True,那麼過期時間為31天,permanent會從PERMANENT_SESSION_LIFETIME中讀取資料
    session.permanent=True

    return 'index'

@app.route('/get/')
def get():
    #session['username']->因為存放在session裡面的資訊是字典格式就跟擷取字典一樣,這種發放如果值不存在就會抛出一樣
    #session.get('username')->使用get值不存在傳回None
    return session.get('username')

@app.route('/delete/')
def delete():
    print(session.get('username'))
    session.pop('username')
    print(session.get('username'))
    return 'success'

@app.route('/clear/')
def clear():
    print(session.get('username'))
    #删除session中的所有資料
    session.clear()
    print(session.get('username'))
    return 'success'

if __name__ == '__main__':
    app.run(debug=True)


           

繼續閱讀