Session會話與Cookie簡單說明
Facebook、 Gmail、 Twitter 是我們每天都會用的網站(LCTT 譯註:才不是呢)。它們的共同點在於都需要你登錄進去後才能做進一步的操作。只有你通過認證並登錄後才能在 twitter 發推,在 Facebook 上評論,以及在 Gmail上處理電子郵件。經常有人會疑惑:Session會話與Cookies的區別是什麽?用戶登錄的原理是什麽?網站是如何認證的?它怎麽知道是哪個用戶從哪兒登錄進來的?下面將對這些問題進行一一解答。
1)session與cookie的簡單區別
session和cookie本質上確實是兩個東西,但cookie同時也是session id的載體,cookie保存session id。
cookie數據存放在用戶的瀏覽器上,session數據放在網站的服務器上。
session保存在服務器端與瀏覽器設置無關,cookie在客戶端並受瀏覽器設置限制。
cookie是在你的電腦瀏覽器上保存的,session是在網站服務器上的. 也就是說你換一個電腦你的cookie就不起作用了, 而session只要你的瀏覽器不關就還能訪問到.
通常的都是兩者結合著用的. cookie的話你自己就可以通過對瀏覽器的設置禁用掉.這樣就不起作用了
cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session。
session是服務器端緩存,cookie是客戶端緩存。
cookie機制采用的是在客戶端保持狀態的方案,而session機制采用的是在服務器端保持狀態的方案
session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie。
session是服務器保持客戶端狀態信息的方案,一般是保存在服務器中的一塊內存中,session超時時間在服務器端進行設置。
cookie是客戶端保持用戶信息的方案,一般是文件形式保存,cookie清空時間是在客戶端瀏覽器設置。
從開發角度說,session信息可以通過技術方案寫到客戶端保存,cookie中的用戶信息,也可以在用戶訪問該網站時,通過技術手段自動更新用戶的session信息。
單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
建議:將登陸信息等重要信息存放為session;其他信息如果需要保留,可以放在cookie中
2)用戶登錄的原理是什麽?
每次用戶在網站的登錄頁面中輸入用戶名和密碼時,這些信息都會發送到服務器。服務器隨後會將你的密碼與服務器中的密碼進行驗證。
如果兩者不匹配,則你會得到一個錯誤密碼的提示。如果兩者匹配,則成功登錄。
3)用戶登錄時發生了什麽?
登錄後,web 服務器會初始化一個會話session並在你的瀏覽器中設置一個 cookie 變量。該 cookie 變量用於作為新建會話的一個引用。
搞暈了?讓我們說的再簡單一點。
4)會話的原理是什麽?
服務器在用戶名和密碼都正確的情況下會初始化一個會話。會話的定義很復雜,可以把它理解為“關系的開始”。
認證通過後,服務器就開始跟用戶展開一段關系了。由於服務器不能象我們人類一樣看東西,它會在我們的瀏覽器中設置一個 cookie 來將我們的關系從其他人與服務器的關系標識出來。
什麽是 Cookie?
cookie 是網站在用戶的瀏覽器中存儲的一小段數據。當用戶登錄後,服務器為用戶創建一段關系或者說一個會話,然後將唯一標識這個會話的會話 id 以 cookie 的形式存儲在用戶的瀏覽器中。所有這些東西存在的原因在於識別出用戶來,這樣當用戶寫評論或者發推時,服務器能知道是誰在發評論,是誰在發推。當用戶登錄後,會產生一個包含會話 id 的 cookie。這樣,這個會話 id 就被賦予了那個輸入正確用戶名和密碼的人了。也就是說,會話 id 被賦予給了擁有這個賬戶的人了。之後,所有在網站上產生的行為,服務器都能通過他們的會話 id 來判斷是由誰發起的。
如何讓用戶保持登錄狀態?
會話有一定的時間限制。這一點與現實生活中不一樣,現實生活中的關系可以在不見面的情況下持續很長一段時間,而會話具有時間限制。用戶必須要不斷地通過一些動作來告訴服務器用戶還在線。否則的話,服務器會關掉這個會話,而用戶會被登出。不過在某些網站上可以啟用"保持登錄"功能,這樣服務器會將另一個唯一變量以 cookie 的形式保存到我們的瀏覽器中。這個唯一變量會通過與服務器上的變量進行對比來實現自動登錄。若有人盜取了這個唯一標識(我們稱之為 cookie stealing),他們就能訪問用戶的賬戶了。
Session會話與Cookie簡單說明