1. 程式人生 > >【計算機網路】Cookie與Session的區別

【計算機網路】Cookie與Session的區別

                                    Cookie與Session的區別

Cookie與Session是網路上儲存資料的兩種機制,理解這兩種方式的區別對我們提高網站執行的效率十分重要。

網站利用這兩種技術,來知道我們的登入保持狀態。比如說,當jack第一次登入網站時,傳送資訊給伺服器,伺服器會在記憶體中開闢出來一塊區域用來存放標識jack的Session,並將此Seesion以JSESSIONID=jack的方式傳回給瀏覽器,瀏覽器需要將此資料儲存在本地,使用鍵值對(key:JSESSIONID,value:jack)的方式進行儲存,這種方式就是Cookie。當jack再次點選網站上的內容時,瀏覽器將此Cookie傳給伺服器,伺服器才能知道此次操作是jack的行為,故不需要讓jack進行登入。

一、Cookie

(1)Cookie的資料儲存在客戶端。

(2)Cookie中只能存放少量的資料,資料大小和數量方面都有限制。

(3)Cookie機制不是很安全,我們可以分析存放在本地的Cookie從而進行Cookie欺騙。因此,Cookie中最好不存放一些敏感的資訊。

(4)Cookie的過期時間:如果不設定Cookie的過期時間,則將當前Cookie稱為會話Cookie,表示這個Cookie的生命期為瀏覽器的會話期間,關閉瀏覽器視窗,Cookie就消失了,會話Cookie一般儲存在記憶體裡。設定了過期時間,則將當前Cookie稱為持久Cookie,瀏覽器會把Cookie儲存在硬碟上,儲存在硬碟上的Cookie會在不同的瀏覽器程序間共享。

(5)應用場景:

【1】判斷註冊使用者是否已經登入網站:使用者可能會得到提示,是否在下一次進入此網站時保留使用者資訊以便簡化登入流程。

【2】根據使用者的愛好定製內容:網站建立包含使用者瀏覽內容的cookies,在使用者下次訪問時,網站根據使用者的情況對顯示的內容進行調整,將使用者感興趣的內容放在前列。

【3】實現永久登入:如果使用者是在自己家的電腦上上網,登入時就可以記住他的登入資訊,下次訪問時不需要再次登入,直接訪問即可。

【4】實現自動登入:當用戶註冊網站後,就會收到一個惟一使用者ID的cookie。使用者再次連線時,這個使用者ID會自動返回,伺服器對它進行檢查,確定它是否是註冊使用者且選擇了自動登入,從而使使用者無需給出明確的使用者名稱和密碼,就可以訪問伺服器上的資源。

【5】使用cookie記錄各個使用者的訪問計數:獲取cookie陣列中專門用於統計使用者訪問次數的cookie的值,將值加1並將最新cookie輸出。

【6】使用cookie記住使用者名稱與使用者密碼。使用者勾選了“自動登入”,就把使用者名稱和密碼的資訊放到cookie中。同時可設定有效期。

【7】用cookie實現新手大禮包等彈窗功能。同理,將新手大禮包彈窗邏輯寫入到cookie中,並設定相應的有效期。比如在有效期內只彈出一次該彈窗,超過有效期登入後再次彈出彈窗。

二、Session

(1)Session的資料儲存在伺服器端,準確的來說是儲存在伺服器端的記憶體中,當伺服器重啟後,Session就會消失。

(2)Session沒有大小的限制,Session儲存的資料由伺服器的記憶體決定,記憶體越大,儲存的Session就越多。

(3)但我們過量的使用Session時,會佔據大量記憶體,大大降低伺服器的效能。為了防止Session過多造成的記憶體溢位,我們會對Session設定超時時間,如果在這個時間內,使用者沒有繼續訪問過網站,伺服器就會在記憶體中將這個Session剔除掉。

(4)應用場景:

【1】通過session累計使用者資料。例如,一個未登入使用者訪問了京東網站,這個時候京東對其下發了一個 cookie,假設cookie的名字叫做abc,那這條記錄就是 abc=001,同時京東的後臺也生成了一個 session id, 它的值也為 001, 001 這個客戶在 2 點、 3 點、 4 點分別添加了三件商品到購物車,這樣後臺也記錄了 session id 為 001的使用者的購物車裡面已經有三件商品,並且只要每次客戶端 cookie 帶上來的值裡面包含session id,後臺都能夠展示相應的資料,如果這個時候,在瀏覽器裡面清空 cookie,cookie 資料消失之後,後臺和客戶端無法建立對應關係,購物車的資料就會失效了。

【2】通過session實現單點登入。一個使用者帳號成功登入後,在該次session還未失效之前,不能在其他機器上登入同一個帳號。登入後將使用者資訊儲存到session中,如果此時在另外一臺機器上一個相同的帳號請求登入,通過遍歷(遍歷的意思就是將所有session都檢視一遍)Web伺服器中所有session並判斷其中是否包含同樣的使用者資訊,如果有,在另一臺機器上是不能登入該帳號的。

三、禁用Cookie怎麼辦

當用戶決定禁用Cookie,而我們除了強制讓使用者開啟Cookie外,還有什麼其他方法來讓我們進行會話保持呢。

(1)URL重寫

直接把JSESSION=ID附在請求連結的後面,而不是存放在HTTP的請求頭中。

(2)表單隱藏欄位

伺服器根據登入名自動修改表單中某個隱藏欄位的值,也就是不同的人請求相同的網頁,返回的網頁都不是相同的。例如:

<form name="form1" action="....">
    <input type="hidden" name="jsessionid" value="ASJKL12IDOBOPOA091">
    <input type="submit" value="提交">
</form>

兩中方式的本質其實是一樣的,不從請求頭中的Cookie欄位獲取,而是從請求內容中獲取。

好了,以上就是我對Cookie與Session的總結,大家也應該都明白了吧。