Flask中的Cookie和Session代表什么

Flask中的Cookie和Session代表什么?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了景德鎮(zhèn)免費(fèi)建站歡迎大家使用!

cookie:在網(wǎng)站中,http請(qǐng)求是無(wú)狀態(tài)的。也就是說(shuō)即使第一次和服務(wù)器連接后并且登錄成功后,第二次請(qǐng)求服務(wù)器依然不能知道當(dāng)前請(qǐng)求是哪個(gè)用戶。cookie的出現(xiàn)就是為了解決這個(gè)問(wèn)題,第一次登錄后服務(wù)器返回一些數(shù)據(jù)(cookie)給瀏覽器,然后瀏覽器保存在本地,當(dāng)該用戶發(fā)送第二次請(qǐng)求的時(shí)候,就會(huì)把上次請(qǐng)求存儲(chǔ)的cookie數(shù)據(jù)自動(dòng)的攜帶給服務(wù)器,服務(wù)器通過(guò)瀏覽器攜帶的數(shù)據(jù)就能判斷當(dāng)前是哪個(gè)用戶了。cookie存儲(chǔ)的數(shù)據(jù)量有限,不同的瀏覽器有不同的存儲(chǔ)大小,但一般不超過(guò)4kb。因此使用cookie只能存儲(chǔ)一些小量的數(shù)據(jù)。

session:session和cookie的作用有點(diǎn)類似,都是為了存儲(chǔ)用戶相關(guān)的信息。不同的是,cookie是存儲(chǔ)在本地瀏覽器,而session存儲(chǔ)在服務(wù)器。存儲(chǔ)在服務(wù)器的數(shù)據(jù)會(huì)更加安全,不容易被竊取。但存儲(chǔ)在服務(wù)器也有一定的弊端,就是會(huì)占用服務(wù)器的資源,但現(xiàn)在服務(wù)器已經(jīng)發(fā)展至今,存儲(chǔ)一些session信息還是綽綽有余的。

cookie和session結(jié)合使用:cookie和session的使用已經(jīng)出現(xiàn)了一些非常成熟的方案。一般有兩種存儲(chǔ)方式:

(1)存儲(chǔ)在服務(wù)端:通過(guò)cookie存儲(chǔ)一個(gè)session_id,然后具體的數(shù)據(jù)則保存在session中。如果用戶已經(jīng)登錄,則服務(wù)器會(huì)在cookie中保存一個(gè)session_id,下次再請(qǐng)求的時(shí)候,會(huì)把該session_id攜帶上,服務(wù)器根據(jù)session_id在sesson庫(kù)中獲取用戶的session數(shù)據(jù)。就能知道該用戶到底是誰(shuí),以及之前保存的一些狀態(tài)信息。這種專業(yè)術(shù)語(yǔ)叫做 server side session。

(2)將session數(shù)據(jù)加密,然后存儲(chǔ)在cookie中。這種專業(yè)術(shù)語(yǔ)叫做 client side session。flask采用的就是這種方式,但是也可以替換成其它方式。

2.設(shè)置cookie

設(shè)置cookie:應(yīng)該在Response的對(duì)象上設(shè)置。flask.Response對(duì)象上有一個(gè)set_cookie方法,可以通過(guò)這個(gè)方法來(lái)設(shè)置cookie信息。

from flask import Flask,request,Response
app = Flask(__name__)
@app.route('/')
def hello_world():
    resp = Response("服務(wù)器返回信息")
    #設(shè)置cookie,
    resp.set_cookie('username','derek')
    return resp
if __name__ == '__main__':
    app.run()

參數(shù)介紹:源碼

 def set_cookie(self, key, value='', max_age=None, expires=None,
                   path='/', domain=None, secure=False, httponly=False,
                   samesite=None):

key:鍵

value:值

max_age:設(shè)置過(guò)期時(shí)間(秒)

expires:設(shè)置過(guò)期時(shí)間,時(shí)間戳的形式(1970離現(xiàn)在的時(shí)間)

path:當(dāng)前主域名

domain:子域名

3.刪除cookie

刪除cookie,通過(guò)Response.delete_cookie方法,指定cookie的key,就可以刪除cookie了。

@app.route('/del/')
def delete_cookie():
    resp = Response("刪除cookie")
    #設(shè)刪除cookie,
    resp.delete_cookie('username')
    return resp

4.設(shè)置cookie過(guò)期時(shí)間

參數(shù)解釋:

(1)max_age:以秒為單位,距離現(xiàn)在多少秒后cookie會(huì)過(guò)期。

(2)expires:datetime類型,這個(gè)時(shí)間需要設(shè)置為格林尼治時(shí)間,也就是要距離北京少8個(gè)小時(shí)。

(3)如果max_age和expires都設(shè)置了,那么這時(shí)候以max-age為標(biāo)準(zhǔn)。

(4)如果沒有指定過(guò)期時(shí)間,則默認(rèn)為瀏覽器關(guān)閉后過(guò)期。

代碼如下:

@app.route('/')
def hello_world():
    resp = Response("設(shè)置cookie")
    # 1.使用expires參數(shù),就必須使用格林尼治時(shí)間
    # 通過(guò)expires參數(shù)設(shè)置有效期的時(shí)候,就要相對(duì)北京時(shí)間少8個(gè)小時(shí),所有這里hours是16,
    # 如果直接days=31,就不準(zhǔn)確了
    expires = datetime.now() + timedelta(days=30,hours=16)
    resp.set_cookie('username','derek',expires=expires)
    
    # 2.使用max_age參數(shù)設(shè)置過(guò)期時(shí)間(1分鐘后后期)
    # resp.set_cookie('username','derek',max_age=60)
    return resp

5. session

flask操作session

設(shè)置session:通過(guò)flask.session就可操作session了,操作session就跟操作字典是一樣的。session['username'] = 'derek'

獲取session:也是類似字典,session.get('key')

刪除session:session.pop(key),刪除指定的值;session.clear(),刪除session中所有的值

設(shè)置session有效期:如果沒有設(shè)置session的有效期。那么默認(rèn)就是瀏覽器關(guān)閉后過(guò)期。如果設(shè)置session.parmanent=True,那么就會(huì)默認(rèn)31天后過(guò)期。如果不想在31天后過(guò)期,那么可以設(shè)置app.config['PERMANENT_SESSION_LIFETIME']= timedelta(hour=2),可以指定多久后過(guò)期(比如:2小時(shí))。

代碼如下:

from flask import Flask,session
import os
from datetime import timedelta
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
#自定義設(shè)置session的有效期
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=2)
@app.route('/')
def index():
    # 設(shè)置session
    session['username'] = 'derek'
    # permanent:過(guò)期時(shí)間,默認(rèn)為false,如果設(shè)置為True,則默認(rèn)為31天之后過(guò)期
    # 可以通過(guò)app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=2)
    # 來(lái)自定義過(guò)期時(shí)間,這樣設(shè)置后,session.permanent = True的session有效期則為兩個(gè)小時(shí)
    session.permanent = True
    return 'Hello World!'
@app.route('/get_session/')
def get_session():
    #獲取session
    username = session.get('username')    # derek
    return username
@app.route('/delete_session/')
def delete_session():
    #刪除session
    session.pop('username')    #刪除指定的session
    # session.clear()          #刪除所有session
    return '刪除成功'
if __name__ == '__main__':
    app.run(debug=True)

關(guān)于Flask中的Cookie和Session代表什么問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

網(wǎng)頁(yè)題目:Flask中的Cookie和Session代表什么
標(biāo)題URL:http://muchs.cn/article14/iehcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、動(dòng)態(tài)網(wǎng)站網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站營(yíng)銷營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)