cookie與session的區別(圖文詳解)

徐林2333發表於2020-12-23

一、共同之處:
cookie和session都是用來跟蹤瀏覽器使用者身份的會話方式。

二、工作原理:
1.Cookie的工作原理
(1)瀏覽器端第一次傳送請求到伺服器端
(2)伺服器端建立Cookie,該Cookie中包含使用者的資訊,然後將該Cookie傳送到瀏覽器端
(3)瀏覽器端再次訪問伺服器端時會攜帶伺服器端建立的Cookie
(4)伺服器端通過Cookie中攜帶的資料區分不同的使用者
在這裡插入圖片描述

2.Session的工作原理
(1)瀏覽器端第一次傳送請求到伺服器端,伺服器端建立一個Session,同時會建立一個特殊的Cookie(name為JSESSIONID的固定值,value為session物件的ID),然後將該Cookie傳送至瀏覽器端
(2)瀏覽器端傳送第N(N>1)次請求到伺服器端,瀏覽器端訪問伺服器端時就會攜帶該name為JSESSIONID的Cookie物件
(3)伺服器端根據name為JSESSIONID的Cookie的value(sessionId),去查詢Session物件,從而區分不同使用者。
name為JSESSIONID的Cookie不存在(關閉或更換瀏覽器),返回1中重新去建立Session與特殊的Cookie
name為JSESSIONID的Cookie存在,根據value中的SessionId去尋找session物件
value為SessionId不存在(Session物件預設存活30分鐘),返回1中重新去建立Session與特殊的Cookie
value為SessionId存在,返回session物件
Session的工作原理圖
在這裡插入圖片描述

在這裡插入圖片描述

三、區別:

cookie資料儲存在客戶端,session資料儲存在服務端。

session
簡單的說,當你登陸一個網站的時候,如果web伺服器端使用的是session,那麼所有的資料都儲存在伺服器上,客戶端每次請求伺服器的時候會傳送當前會話sessionid,伺服器根據當前sessionid判斷相應的使用者資料標誌,以確定使用者是否登陸或具有某種許可權。由於資料是儲存在伺服器上面,所以你不能偽造。

cookie
sessionid是伺服器和客戶端連線時候隨機分配的,如果瀏覽器使用的是cookie,那麼所有資料都儲存在瀏覽器端,比如你登陸以後,伺服器設定了cookie使用者名稱,那麼當你再次請求伺服器的時候,瀏覽器會將使用者名稱一塊傳送給伺服器,這些變數有一定的特殊標記。伺服器會解釋為cookie變數,所以只要不關閉瀏覽器,那麼cookie變數一直是有效的,所以能夠保證長時間不掉線。

如果你能夠截獲某個使用者的cookie變數,然後偽造一個資料包傳送過去,那麼伺服器還是 認為你是合法的。所以,使用cookie被攻擊的可能性比較大。

如果cookie設定了有效值,那麼cookie會儲存到客戶端的硬碟上,下次在訪問網站的時候,瀏覽器先檢查有沒有cookie,如果有的話,讀取cookie,然後傳送給伺服器。

所以你在機器上面儲存了某個論壇cookie,有效期是一年,如果有人入侵你的機器,將你的cookie拷走,放在他機器下面,那麼他登陸該網站的時候就是用你的身份登陸的。當然,偽造的時候需要注意,直接copy cookie檔案到 cookie目錄,瀏覽器是不認的,他有一個index.dat檔案,儲存了 cookie檔案的建立時間,以及是否有修改,所以你必須先要有該網站的 cookie檔案,並且要從保證時間上騙過瀏覽器

兩個都可以用來存私密的東西,session過期與否,取決於伺服器的設定。cookie過期與否,可以在cookie生成的時候設定進去。

四、區別對比:
(1)cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上
(2)cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,如果主要考慮到安全應當使用session
(3)session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能,如果主要考慮到減輕伺服器效能方面,應當使用COOKIE
(4)單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。
(5)所以:將登陸資訊等重要資訊存放為SESSION;其他資訊如果需要保留,可以放在COOKIE中

轉自CSDN 作者:秋風不識路

相關文章