淺談Cookie和Session

接觸前端也算是有段時間了,但一直沒有認真去理解cookie和session之間的區別,乘着閒暇之餘簡單地整理了一下,以便日後使用。

Cookie與Session二者之間的共同之處:

Cookie和Session都是用來跟蹤瀏覽器用戶身份的會話方式。換句話說,就是判斷當前瀏覽器用戶是否有權限登錄以及登錄後具有哪些權限。

Cookie與Session二者之間的不同之處:

數據保存方案

cookie:使用的是在客戶端保持狀態的方案,可以用來會話間持久地保存數據。

session:使用的是在服務器端保持狀態的方案,session利用cookie進行信息處理,當用戶發送請求後,服務端在用戶端創建了一個cookie,當session結束後,也就 意味着cookie失效了。

數據保存的生命週期

cookie:當瀏覽器關閉時,cookie也會跟着一起消亡。但可以爲cookie設置生命週期,當cookie生成時,爲其設置期限,使其在某一段時間內仍有效。

session:服務器會把長時間沒有活動的Session從服務器內存中清除,此時Session便失效。Tomcat中Session的默認失效時間爲20分鐘。

    爲session設置生命週期只能在服務端爲其設定。

實際運行上的區別簡單的說,當你登錄一個網站的時候,

1.如果web服務器端使用的是session,那麼所有的數據都保存在服務器上,客戶端每次請求服務器的時候會發送當前會話的sessionid,
服務器根據當前sessionid判斷相應的用戶數據標誌,以確定用戶是否登錄或具有某種權限。由於數據是存儲在服務器上面,所以你不能僞造,但是如果你
能夠獲取某個登錄用戶的sessionid,用特殊的瀏覽器僞造該用戶的請求也是能夠成功的。sessionid是服務器和客戶端鏈接時候隨機分配的,一般來說是不
會有重複,但如果有大量的併發請求,也不是沒有重複的可能性.
2.如果瀏覽器使用的是cookie,那麼所有的數據都保存在瀏覽器端,比如你登錄以後,服務器設置了cookie用戶名,那麼當你再次請求服務器的時候,瀏覽
器會將用戶名一塊發送給服務器,這些變量有一定的特殊標記。服務器會解釋爲cookie變量,所以只要不關閉瀏覽器,那麼cookie變量一直是有效的,所以
能夠保證長時間不掉線。如果你能夠截獲某個用戶的 cookie變量,然後僞造一個數據包發送過去,那麼服務器還是認爲你是合法的。所以,使用 cookie被攻擊的可能性比較大。如果設置了的有效時間,那麼它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然後發送給服務器。如果你在機器上面保存了某個論壇 cookie,有效期是一年,如果有人入侵你的機器,將你的 cookie拷走,然後放在他的瀏覽器的目錄下面,那麼他登錄該網站的時候就是用你的的身份登錄的。所以 cookie是可以僞造的。當然,僞造的時候需要主意,直接copy cookie文件到 cookie目錄,瀏覽器是不認的,他有一個index.dat文件,存儲了 cookie文件的建立時間,以及是否有修改,所以你必須先要有該網站的cookie文件,並且要從保證時間上騙過瀏覽器。

Cookie與Session二者的選擇:

  1. cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,如果主要考慮到安全應當使用session
  2. session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用COOKIE
  3. 單個cookie在客戶端的限制是4K,客戶端存放的COOKIE最多保存20個。
  4. 所以:將登陸信息等重要信息存放爲SESSION;其他信息如果需要保留,可以放在COOKIE中



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章