一、共同之處:
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中