天天看點

了解cookie和session的作用、聯系與差別

前言:我們知道Http協定是無狀态的。無狀态的意思就是Http協定對于處理的事務是沒有記憶功能的。最常見的例子就是當一個使用者浏覽商品添加購物後,他關閉了浏覽器,然後重新進行登入準備下單,那麼這時候服務端就不知道這次請求下單的與上次添加購物車的是否是同一個人。辨識使用者身份是非常重要的,那麼Cookie、Session和token就有這一層作用。

一、Cookie

       當我們第一次使用浏覽器在某網頁去輸入使用者名和密碼登入賬号後,會給出一個彈框,提示我們是否要儲存我們的使用者名和密碼,一般會給出兩個選項【儲存】和【一律不】如下圖所示。

了解cookie和session的作用、聯系與差別

       其實這個提示要我們儲存的就是cookie資訊。

       Cookie是伺服器發送到使用者浏覽器并儲存在本地的一小塊資料,它會在浏覽器下次向伺服器再次發起請求時被攜帶并發送到伺服器上。它用來告知服務端兩個請求是否來自同一個浏覽器,簡單來說就是用來識别使用者身份。

       正如上圖所見,Cookie儲存着使用者的使用者名和密碼,另外cookie還能設定過期時間、儲存路徑、有效期等資訊。通過設定有效期可以長期或者暫時将資訊儲存在浏覽器上。

二、Session

       Session與Cookie類似。不過Cookie是儲存在用戶端的,Session是儲存在服務端的。 Session是會話級别的,它會在使用者會話中一直存在下去,當使用者在應用程式的Web頁之間跳轉時,存儲在Session對象中的變量将不會丢失,而是在整個使用者會話中一直存在下去。當使用者請求來自應用程式的 Web頁時,如果該使用者還沒有會話,則Web伺服器将自動建立一個 Session對象。當會話過期或被放棄後,伺服器将終止該會話。

       使用者向服務端發送請求時,伺服器會生成一個唯一的session ID,而這個session ID會被存儲在cookie中,當使用者請求資料時,會将session ID一同送出到伺服器,通過與服務端session ID對比來判斷是否時同一個使用者的請求。一般來說cookie和session需要配合使用。

三、對比

       1.由于cookie儲存在用戶端,有可能會被人篡改或竊取,它存在一定的安全隐患(一般情況下,浏覽器會對cookie進行一些限制,提高cookie的安全性),session是儲存在伺服器端的是以安全性更高一些,是以我們可以把一些重要資訊用session來存儲;

       2.cookie可以設定儲存時間,會在有效期内一直儲存;而session是會話級别的,會話結束,session也相應被清楚;

       3.單個cookie儲存的資料一般小于4kb,并且一般一個站點最多儲存20個cookie;而對于session來說沒有限制,但是由于session儲存在伺服器端,session不宜過大,會影響伺服器端的性能;

       4.cookie中通常儲存的是字元串;session中能存儲任何資料類型的資料;

       5.cookie中如果設定了路徑參數,那麼同一網站中不同路徑下的cookie互相是通路不到的;session不能區分路徑,同一使用者在通路一個網站期間,所有session在任何一個地方都可以通路到。