日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Flask中Cookie和Session理解與作用介紹_python

作者:Ywx_csdn ? 更新時間: 2022-11-24 編程語言

前序

1、cookie介紹

Cookie是一段不超過4KB的小型文本數(shù)據(jù),保存在客戶端瀏覽器中,由一個名稱(Name)、一個值(Value)和其它幾個用于控制Cookie有效期、安全性、使用范圍的可選屬性組成。其中 :

(1) Name/Value:設置Cookie的名稱及相對應的值,對于認證Cookie,Value值包括Web服務器所提供的訪問令牌。

(2) Expires屬性:設置Cookie的生存期。有兩種存儲類型的Cookie:會話性與持久性。Expires屬性缺省時,為會話性Cookie,僅保存在客戶端內(nèi)存中,并在用戶關閉瀏覽器時失效;持久性Cookie會保存在用戶的硬盤中,直至生存期到或用戶直接在網(wǎng)頁中單擊“注銷”等按鈕結束會話時才會失效 。

(3) Path屬性:定義了Web站點上可以訪問該Cookie的目錄 。

(4) Domain屬性:指定了可以訪問該 Cookie 的 Web 站點或域。

2、session介紹

Session:與cookie功能效果相同。Session與Cookie的區(qū)別在于Session是記錄在服務端的,而Cookie是記錄在客戶端的。

當訪問服務器否個網(wǎng)頁的時候,會在服務器端的內(nèi)存里開辟一塊內(nèi)存,這塊內(nèi)存就叫做session,而這個內(nèi)存是跟瀏覽器關聯(lián)在一起的。這個瀏覽器指的是瀏覽器窗口,或者是瀏覽器的子窗口,意思就是,只允許當前這個session對應的瀏覽器訪問,就算是在同一個機器上新啟的瀏覽器也是無法訪問的。而另外一個瀏覽器也需要記錄session的話,就會再啟一個屬于自己的session。

一、cookie學習

1、設置cookie

  • 在服務器設置cookie需要導入make_response包
  • response=make_response(‘hello world’) 括號這里傳入的值是在客戶端響應的內(nèi)容
  • response.set_cookie(‘username’,‘mashibing’,max_age=3600) 第一個值是cookie名稱,第二個值cookie內(nèi)容,第三個值設置cookie的有效時間
  • 這個有效時間在服務器沒有關閉的狀態(tài)下,有效時間內(nèi),即使你關閉了客戶端(瀏覽器),再次打開客戶端(瀏覽器)仍能訪問到。
from flask import *
app=Flask(__name__)
#設置cookie以及有效性期
@app.route('/cookie')
def set_cookiei():
    response=make_response('hello world')
    response.set_cookie('username','mashibing',max_age=3600)
    return response
#讀取
@app.route('/get_cookie')
def get_cookie():
    resp=request.cookies.get('username')
    return resp
if __name__ == '__main__':
    app.run()

2、客戶端(瀏覽器)

二、session學習

1、設置SECRET_KEY

  • 這里SECRET_KEY的值是可以隨機設置,可以使用os.urandom(24) 隨機生成24位字符
  • 此值 [ SECRET_KEY 設置]是保護簽名數(shù)據(jù)的關鍵 - 保持此安全至關重要,否則攻擊者可以使用它來生成自己的簽名值。
  • 設置SECRET_KEY 配合加密算法生成sessionID
  • PERMANENT_SESSION_LIFETIME=timedelta(minutes=30) 設置該sessionID在服務器存儲的時間,在有效時間內(nèi)客戶端(瀏覽器)關掉后再次重新訪問時,會對其session ID進行校驗,若是之前保存在服務器的session ID對應,則可以拿到之前session值。
class Df(object):
    SECRET_KEY=os.urandom(24)
    PERMANENT_SESSION_LIFETIME=timedelta(minutes=30)

2、設置session

  • 這里設置session值在客戶端是看不到的,相對安全,除非服務器崩了。
  • 設置的session會保存在服務器。
  • session.permanent=True #這行代碼也要寫不然前面定義的時間失效。
  • 設置session是以鍵值對的形式。
@app.route('/test1')
def test1():
    session.permanent=True  #這行代碼也要寫不然前面定義的時間失效
    #設置session
    session['un']='ywx'
    session['pwd']='123456'
    return 'hello ywx'

3、獲取session值

通過session.get() 獲取定義的值

#讀取session
@app.route('/test2')
def test2():
    un=session.get('un')
    pwd=session.get('pwd')
    print(un,pwd)
    return '獲取session的值'

4、整體代碼展示

from flask import *
import os
from datetime import timedelta
app=Flask(__name__)
#設置SECRET_KEY
class Df(object):
    SECRET_KEY=os.urandom(24)
    PERMANENT_SESSION_LIFETIME=timedelta(minutes=30)
#導進來參數(shù)
app.config.from_object(Df)
@app.route('/test1')
def test1():
    session.permanent=True  #這行代碼也要寫不然前面定義的時間失效
    #設置session
    session['un']='ywx'
    session['pwd']='123456'
    return 'hello ywx'
#讀取session
@app.route('/test2')
def test2():
    un=session.get('un')
    pwd=session.get('pwd')
    print(un,pwd)
    return '獲取session的值'
if __name__ == '__main__':
    app.run()

5、客戶端(瀏覽器)展示

原文鏈接:https://blog.csdn.net/Ywx_csdn/article/details/127195470

欄目分類
最近更新