Flask中的cookie和session淺知

2021-09-20 21:57:20 字數 3636 閱讀 4780

cookie技術的必要性

cookie的實現原理

cookie時用來將使用者資訊儲存在客戶端的技術,使用者資訊會被存放於客戶端的計算機中。

cookie儲存到客戶端之後,當使用者再次通過瀏覽器發起對伺服器的請求的時候,瀏覽器就會自動帶著此**相關的cookie資訊來請求資料庫。而cookie資訊裡面儲存的就是用來驗證和確認使用者身份的資料,使用者瀏覽此**的任何頁面都會帶上此**的cookie,這樣就能唯一確定使用者身份,進行狀態的保持。

**實現

from flask import flask, make_response

def login():

responpse = make_response('登入成功!')

responpse.set_cookie('user','小明',10)

return responpse

def user_info():

user = request.cookies.get('user','使用者資訊不存在')

return user

def logout():

response = make_response('退出成功!')

response.delete_cookie('username')

return response

session的實現原理

sesion和cookie相似,都是用來儲存使用者資訊的,最大的不同在於,cookie是將使用者資訊儲存在客戶端的計算機中,而session則是將使用者的資訊加密以後放到伺服器的session當中,由於伺服器上會儲存很多使用者的資訊,所以要對各自的session資訊進行編號,就類似在伺服器放了很多盒子,每個盒子裡面存放著乙個使用者的加密資訊,那麼每個盒子的編號我們這裡用session_id來表示,伺服器就會把這個session_id返回到客戶端,客戶端把這個session_id儲存到cookie當中,下次再請求伺服器的時候,會自動帶上這個session_id由於每個人的session_id都是隨機生成,而且是唯一的,所以就能唯一確定使用者身份。還有就是,使用者資訊這次是加密之後儲存在伺服器端的,所以要比cookie更加安全。

**實現

from flask import flask,url_for,request,session					#引入session
設定乙個secret_key子串,有兩種方法:

在配置檔案中設定:secret_key=「1422345」

def login():

session['username'] = 'xiaoming'

session['userid'] = '1111111'

return '登入成功'

def user_info():

name = session.get('username','使用者資訊不存在')

user_id = session.get('userid','使用者id不存在')

return name + user_id

def logout():

session.pop('username',none)

return '退出成功'

def clear():

session.clear()

return '清空所有session'

1、共同點:

都是為了記錄使用者的狀態。

2、不同點:

①在儲存方面:cookie儲存在客戶端瀏覽器中,而session儲存在伺服器上。cookie中只能保管ascii字串,而session中能夠訪問任何型別的資料。

②在生命週期方面:cookie是通過maxage設定過期時間。若設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。session在使用者第一次訪問伺服器的時候自動建立。session生成後, 只要使用者繼續訪問,伺服器就會更新session的最後訪問時間,並維護該session。(有點類似快取控制演算法lru) 為防止記憶體溢位,伺服器會把長時間內沒有活躍的session從記憶體刪除。這個時間就是session的超時時間。如果超過了超時時間沒訪問過伺服器,session就自動失效了。

③依賴方面:session儲存在伺服器,對客戶端是透明的,它的正常執行仍然需要客戶端瀏覽器的支援。並且在識別是否是同一瀏覽器方面:伺服器向客戶端瀏覽器傳送乙個名為jsessionid的cookie,session依據該cookie來識別是否為同一使用者。

④隱私策略方面:cookie儲存在客戶端閱讀器中,對客戶端是可見的,客戶端的一些程式可能會窺探、複製以至修正cookie中的內容。而session儲存在伺服器上,對客戶端是透明的,不存在敏感資訊洩露的風險。

⑤跨域支援上的不同:cookie支援跨網域名稱訪問,session僅在他所在的網域名稱內有效。

優點

cookie

①極高的擴充套件性和可用性。

②可配置到期規則 cookie 可以在瀏覽器會話結束時到期,或者可以在客戶端計算機上無限期存在,這取決於客戶端的到期規則。

③不需要使用大量伺服器資源,cookie 儲存在客戶端並在傳送後由伺服器讀取

④簡單性 cookie 是一種基於文字的輕量結構,包含簡單的鍵值對,結構簡單

session

①易於讀寫的特性

②易於站點的使用者化

缺點

cookie

①cookie數量和長度的限制。每個domain最多只能有20條cookie,每個cookie長度不能超過4kb,否則會被截掉

②潛在的安全風險 cookie 可能會被篡改

session

①依託性。如果某使用者將瀏覽器設定為不相容任何cookie,那麼該使用者就無法使用這個session變數

②session會在一定時間內儲存在伺服器上。當訪問增多,會比較占用較大的伺服器效能

一般的攻擊方式

cookie

①直接訪問cookie檔案查詢想要的機密資訊;

②在客戶端和服務端進行cookie資訊傳遞時候進行擷取,進而冒充合法使用者進行操作;

③. 攻擊者修改cookie資訊,所以在服務端接收到客戶端獲取的cookie資訊的時候,就會對攻擊者偽造過的cookie資訊進行操作

解決方案

不要在cookie中儲存敏感資訊;

不要在cookie中儲存沒有經過加密的或者容易被解密的敏感資訊;

對從客戶端取得的cookie資訊進行嚴格校驗;

使用ssl/tls來傳遞cookie資訊。

session

①會話劫持(通過獲取使用者session id後,使用該session id登入目標賬號的攻擊方法)

解決方案: 使用user-agent檢測請求的一致性;設定httponly,可以防止客戶端指令碼訪問這個cookie,從而有效的防止xss攻擊;關閉透明化session id;更改session名稱

②會話固定(誘騙受害者使用攻擊者指定的會話標識(session id)的攻擊手段)

解決方案:使用者登入時生成新的session id;以及上訴的一些解決方案

flask中cookie和session設定

在 中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie 的出現就是為了解決這個問題,第一次登入後伺服器返回一些資料 cookie 給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請...

flask中cookie和session介紹

在 中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie的出現就是為了解決這個問題,第一次登入後伺服器返回一些資料 cookie 給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請求...

Flask寫web時cookie的處理

flask是乙個微型web開發框架,別看他微型,在github上排名還是挺高的。a microframework based on werkzeug,jinja2 and good intentions 因為他微型,容易掌握,所以對於一些控制欲很強的人,比如我,就會放棄強大的dinjgo,而轉向fl...