COOKIE和Session的原理及異同
一.原理
cookie原理:
1)當用戶第一次訪問服務器時:服務器會在響應消息中增加Set-Cookie頭字段
(Set-Cookie頭字段的語法格式:Set-Cookie: CookieName=CookieValue; Path=/;),將用戶信息以Cookie的形式發送給瀏覽器。
2)一旦用戶瀏覽器接受了服務器發送的Cookie信息,就會將它保存在瀏覽器的緩存區中。
3)當瀏覽器後續訪問服務器時,都會在請求消息中將用戶信息以Cookie的形式發送給Web服務器,從而使服務器端分辨出當前請求是由哪個用戶發出的。
2.session作用原理
Session相當於程序在服務器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了。相當於醫院發放就診卡,卡上只有卡號而沒有其他信息。醫生根據卡號在醫院查詢到病人的就診信息。
需要註意的是,客戶端需要接受、記錄和回送Session對象的ID。
1、創建Session
當用戶訪問到一個服務器,如果服務器啟用Session,服務器就要為該用戶創建一個SESSION,在創建這個SESSION的時候,服務器首先檢查這個用戶發來的請求裏是否包含了一個SESSION ID,如果包含了一個SESSION ID則說明之前該用戶已經登陸過並為此用戶創建過SESSION,那服務器就按照這個SESSION ID把這個SESSION在服務器的內存中查找出來(如果查找不到,就有可能為他新創建一個),如果客戶端請求裏不包含有SESSION ID,則為該客戶端創建一個SESSION並生成一個與此SESSION相關的SESSION ID。這個SESSION ID是唯一的、不重復的、不容易找到規律的字符串,這個SESSION ID將被在本次響應中返回到客戶端保存,而保存這個SESSION ID的正是COOKIE,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。
我們知道在IE中,我們可以在工具的Internet選項中把Cookie禁止,那麽會不會出現把客戶端的Cookie禁止了,那麽SESSIONID就無法再用了呢?找了一些資料說明,可以有其他機制在COOKIE被禁止時仍然能夠把Session id傳遞回服務器。經常被使用的一種技術叫做URL重寫,就是把Session id直接附加在URL路徑的後面一種是作為URL路徑的附加信息,表現形式為:
http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764;
http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
還有一種就是表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把Session id傳遞回服務器。
二.相同點
兩者都是為了存儲用戶數據
三.不同點
1.存儲位置不同
cookie數據存放在客戶的瀏覽器中,session數據存在服務器當中。
2.安全程度不同
cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session。
3.數據存儲大小不同
cookie的存儲不能超過4k,而session沒有限制
4.對服務器造成的壓力不同
Session是保管在服務器端的,每個用戶都會產生一個Session。假如並發訪問的用戶十分多,會產生十分多的Session,耗費大量的內存。而Cookie保管在客戶端,不占用服務器資源。假如並發閱讀的用戶十分多,Cookie是很好的選擇。
5.跨域支持上的不同
Cookie支持跨域名訪問,例如將domain屬性設置為“.baidu.com”,則以“.baidu.com”為後綴的一切域名均能夠訪問該Cookie。跨域名Cookie如今被普遍用在網絡中。而Session則不會支持跨域名訪問。Session僅在他所在的域名內有效。
COOKIE和Session的原理及異同