1. 程式人生 > >Session和Cookie的區別與聯系

Session和Cookie的區別與聯系

會銷 驗證 了解 文件中 csharp OS 不同的 訪問量 對比

一,Session
1,概念:session存放在服務端,一般情況下,服務器默認30分鐘保存這個Session,過了時間限制就會銷毀,在銷毀之前,開發者可以將用戶的一些數據以key和value的形式暫時存放在這個Session中。當然,也有使用數據庫將這個Session序列化保存起來,好處是沒有了時間的限制,壞處是隨著時間的增加,這個數據庫會急速膨脹,特別是訪問量增加的時候,所以一般采取第一種方式,以減輕服務器壓力。

2,請求流程:當瀏覽器第一次發送請求時,服務器自動生成一個Session和一個Session ID用來唯一表示這個Session,並將其通過響應發送到瀏覽器,當瀏覽器第二次發送請求的時候,會將前一次服務器響應中Session ID放在請求中一並發送到服務器上,服務器從中提取出Session ID並和保存的所有Session ID進行對比,找到這個用戶對應的Session。

3,Session客戶端實現形式(即Session ID的保存方法) 一般瀏覽器提供兩種方式來保存,還有一種是程序員使用html隱藏域的方式自定義實現;

【1】使用Cookie來保存,這是最常見的方法,例如“記錄我的登錄狀態”功能的實現正是基於這種方式的。服務器通過設置Cookie的方式將Session ID發送到瀏覽器,如果我們不設置這個過期時間,那麽這個Cookie將不存放在硬盤上,當瀏覽器關閉的時候,Cookie就消失了,這個Session ID就丟失了。如果我們設置這個時間為若幹天後,那麽這個Cookie會保存在客戶端硬盤中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應網站時,同樣會發送到服務器上。

【2】使用URL附加信息的方式,也就是像我們經常看到JSP網站會有aaa.jsp?JSESSIONID=*一樣的。這種方式和第一種方式裏面不設置Cookie過期時間是一樣的

【3】第三種方式是在頁面表單裏添加隱藏域,這種方式實際上和第二種方式一樣,只不過前者通過GET方式發送數據後者是用POST方式發送數據,但是明顯後者比較麻煩。

4,Cookie和Session區別

cookie存儲在客戶端(瀏覽器),session存儲在服務端,簡 單的說,當你登錄一個網站的時候,如果web服務器端使用的是session,那麽所有的數據都保存在服務器上面,客戶端每次請求服務器的時候會發送 當前會話的sessionid,服務器根據當前sessionid判斷相應的用戶數據標誌,以確定用戶是否登錄,或具有某種權限。由於數據是存儲在服務器 上面,所以你不能偽造,但是如果你能夠獲取某個登錄用戶的sessionid,用特殊的瀏覽器偽造該用戶的請求也是能夠成功的。sessionid是服務 器和客戶端鏈接時候隨機分配的,一般來說是不會有重復,但如果有大量的並發請求,也不是沒有重復的可能性。

cookie是屬於session對象的一種,但有不同,Cookie不會占用服務器資源,是存在客戶端內存或者一個cookie文本文件中,而“session”則會占用服務器資源,所以盡量不要使用session,而是用cookie,但我們一直認為cookie是不可靠的,session是可靠的,但是目前很多著名的站點都使用cookie,,有時候為了解決禁用cookie後的頁面處理,通常采用url重寫技術,調用session中大量有用的方法從session中獲取數據後置入頁面。

5,Cookie和Session的應用場景

Cookies的安全性能一直是倍受爭議的。雖然Cookies是保存在本機上的,但是其信息的完全可見性且易於本地編輯性,往往可以引起很多的安全問題。所以Cookies到底該不該用,到底該怎樣用,就有了一個需要給定的底線。

【1】session

登陸驗證信息。一般采用Session(“Logon”)=true or false的形式。 用戶的各種私人信息,比如姓名等,某種情況下,需要保存在Session裏 需要在頁面間傳遞 的內容信息,比如調查工作需要分好幾步。每一步的信息都保存在Session裏,最後在統一更 新到數據庫

【2】cookie

判斷用戶是否登陸過網站,以便下次登錄時能夠直接登錄。如果我們刪除cookie,則每次登 錄必須從新填寫登錄的相關信息。 另一個重要的應用是“購物車”中類的處理和設計。用戶可能在一段時間內在同一家網站的不同 頁面選擇不同的商品,可以將這些信息都寫入cookie,在最後付款時從cookie中提取這些信 息,當然這裏面有了安全和性能問題需要我們考慮了。

6,使用cookie應遵循的原則

(1)不要保存私人信息。 (2)任何重要數據,最好通過加密形式來保存數據(最簡單的可以用URLEncode,當然也可以用完善的可逆加密方式,遺憾的是,最好不要用md5來加密)。 (3)是否保存登陸信息,需有用戶自行選擇。 (4)長於10K的數據,不要用到Cookies。 (5)也不要用Cookies來玩點讓客戶驚喜的小遊戲。

註:以上是公司最近面試總問的一個問題,發現很多工作四五年的回答的也不全面,所以從網上找了些資料

  

Session和Cookie的區別與聯系