session和cookie的區別

session和cookie的區別


本文由 tinyfisher 發表在他的 新浪博客 【原文鏈接在此

 

       session和cookie是網站瀏覽中較爲常見的兩個概念,也是比較難以辨析的兩個概念,但它們在點擊流及基於用戶瀏覽行爲的網站分析中卻相當關鍵。基於網上一些文章和資料的參閱,及作者個人的應用體會,對這兩個概念做一個簡單的闡述和辨析,希望能與大家共同探討下。
       session和cookie的最大區別在於session是保存在服務端的內存裏面,而cookie保存於瀏覽器或客戶端文件裏面;session是基於訪問的進程,記錄了一個訪問的開始到結束,當瀏覽器或進程關閉之後,session也就“消失”了,而cookie更多地被用於標識用戶,它可以是長久的,用於用戶跟蹤和識別唯一用戶(Unique Visitor)。

一、關於定義:

1.1 Session:

       HTTP協議(http://www.w3.org/Protocols/)是“一次性單向”協議。服務端不能主動連接客戶端,只能被動等待並答覆客戶端請求。客戶端連接服務端,發出一個HTTP Request,服務端處理請求,並且返回一個HTTP Response給客戶端,本次HTTP Request-Response Cycle結束。 
       我們看到,HTTP協議本身並不能支持服務端保存客戶端的狀態信息。於是,Web Server中引入了session的概念,用來保存客戶端的狀態信息。

       這裏用一個形象的比喻來解釋session的工作方式。假設Web Server是一個商場的存包處,HTTP Request是一個顧客,第一次來到存包處,管理員把顧客的物品存放在某一個櫃子裏面(這個櫃子就相當於Session),然後把一個號碼牌交給這個顧客,作爲取包憑證(這個號碼牌就是Session ID)。顧客(HTTP Request)下一次來的時候,就要把號碼牌(Session ID)交給存包處(Web Server)的管理員。管理員根據號碼牌(Session ID)找到相應的櫃子(Session),根據顧客(HTTP Request)的請求,Web Server可以取出、更換、添加櫃子(Session)中的物品,Web Server也可以讓顧客(HTTP Request)的號碼牌和號碼牌對應的櫃子(Session)失效。顧客(HTTP Request)的忘性很大,管理員在顧客回去的時候(HTTP Response)都要重新提醒顧客記住自己的號碼牌(Session ID)。這樣,顧客(HTTP Request)下次來的時候,就又帶着號碼牌回來了。 我們可以看到,Session ID實際上是在客戶端和服務端之間通過HTTP Request和HTTP Response傳來傳去的。

1.2 Cookie:

Cookie是什麼? 

       Cookie 是一小段文本信息,伴隨着用戶請求和頁面在 Web 服務器和瀏覽器之間傳遞。Cookie 包含每次用戶訪問站點時 Web 應用程序都可以讀取的信息。

爲什麼需要Cookie? 

        因爲HTTP協議是無狀態的,對於一個瀏覽器發出的多次請求,WEB服務器無法區分 是不是來源於同一個瀏覽器。所以,需要額外的數據用於維護會話。 Cookie 正是這樣的一段隨HTTP請求一起被傳遞的額外數據。

Cookie能做什麼? 

        Cookie只是一段文本,所以它只能保存字符串。而且瀏覽器對它有大小限制以及 它會隨着每次請求被髮送到服務器,所以應該保證它不要太大。 Cookie的內容也是明文保存的,有些瀏覽器提供界面修改,所以, 不適合保存重要的或者涉及隱私的內容。

Cookie 的限制

       大多數瀏覽器支持最大爲 4096 字節的 Cookie。由於這限制了 Cookie 的大小,最好用 Cookie 來存儲少量數據,或者存儲用戶 ID 之類的標識符。用戶 ID 隨後便可用於標識用戶,以及從數據庫或其他數據源中讀取用戶信息。 瀏覽器還限制站點可以在用戶計算機上存儲的 Cookie 的數量。大多數瀏覽器只允許每個站點存儲 20 個 Cookie;如果試圖存儲更多 Cookie,則最舊的 Cookie 便會被丟棄。有些瀏覽器還會對它們將接受的來自所有站點的 Cookie 總數作出絕對限制,通常爲 300 個。

       通過前面的內容,我們瞭解到Cookie是用於維持服務端會話狀態的,通常由服務端寫入,在後續請求中,供服務端讀取。session id保存在cookie中


二、存放位置,內容及大小:

       session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE;
       單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。將登陸信息等重要信息存放爲SESSION其他信息如果需要保留,可以放在COOKIE中;
       session不能區分路徑,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置了路徑參數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的;
       session中保存的是對象,cookie中保存的是字符串;
       cookie 可設置並在本地保留明碼信息。session在IE不關閉並服務器不超時只有SESSIONID。當如果想讓用戶下次登入網站不需要輸入用戶名或者密碼的時候就只能用COOKIE,因爲他可以保留相當長的時間(在COOKIE記錄被刪除或者失效日期之前)。而SESSION就不可以,他不會保留太長時間,而且IE在關閉後就自動清除了SESSIONID記錄。在下次登入的時候會請求新的SESSIONID,而服務器想通過用戶個人變量校驗用戶的狀態的時候,就不能用COOKIE。如果用設置用戶權限是USER。而IE訪問的時候就把USER的明碼傳輸到服務器。

 

三、相關文章

  1. cookie和session的區別
  2. 深入解析Cookie技術

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