cookie與session以及他們的常規用途——web開發必須熟知的知識

什麼是cookie?

  cookie是服務器程序存儲在瀏覽器本地硬盤的信息。

cookie有什麼特點?

  cookie採用的是鍵值對結構存儲,只不過鍵和值都是字符串類型。不同瀏覽器下cookie個數和長度我沒有去特意研究,參考了網上資料不同瀏覽器中Cookies的長度。因爲是保存在瀏覽器本地,所以用瀏覽器調試是可以看到cookie信息。不同的服務器程序(用域名區分)有着不同的cookie域,不會出現百度拿到淘寶cookie信息的情況。不同內核的瀏覽器使用的不是同一個cookie域,例如IE瀏覽器登錄了淘寶,搜狗瀏覽器進入淘寶是登錄狀態(之所以說是登錄狀態而不只是說同樣的cookie,待我寫完session再說),谷歌瀏覽器則是未登錄狀態。因爲IE和搜狗瀏覽器同是IE內核,谷歌瀏覽器不是。

cookie的生命週期是什麼?

  cookie的生命週期由服務器程序在生成cookie信息時候決定,沒有指定過期時間則在瀏覽器關閉時失效,有指定過期時間則在指定時間內就算瀏覽器關閉重啓也一樣有效。

谷歌瀏覽器下查看cookie:



什麼是session?

  session是服務器程序記錄在服務器端的會話消息。

session有什麼特點?

  session也是採用鍵值對的結構存儲,鍵爲string類型,值爲任意類型,用Map表示就是Map<String,Object>。session功能依賴於瀏覽器的cookie功能,只有cookie沒被禁止的時候session才能正常使用。cookie裏面有個鍵值對是關聯sessionid的(基於java開發的服務器對應的sessionid鍵名爲JSESSIONID),通過sessionid來確定哪個session裏面存放的是哪個瀏覽器用戶的會話消息。

session的生命週期是什麼?

  session從瀏覽器第一次訪問服務器程序(訪問靜態資源不算)開始創建,當瀏覽器關閉時或者服務器設置的session時效過了時session過期。

如果光說cookie和session的概念、特點和生命週期,我感覺百度說的比我更詳細。下面我講講cookie、session在開發中常用的用途,不論是在jsp、asp、php中都可以共用的思路(我猜測asp和php也有對應的實現),如果我只講jsp,前面我就會講得更細緻更針對jsp。cookie配合session做的最多的還是自動登錄,我來講講自動登錄的實現機制。

半自動登錄(每個B/S應用都少不了):

第一次訪問服務器時cookie中記錄下sessionid,創建了session,服務器判斷session中有沒有登錄成功的標誌(例如存放了用戶id或者用戶信息),如果是登錄了轉向需要登錄權限的界面,如果沒有登錄則轉向登錄界面進行登錄,登錄成功了則把登錄信息放入session中(例如放用戶id或者用戶信息)。在瀏覽器沒有關閉或者session時效內的時候是無需重複登錄的,所謂的退出登錄不過是把session裏面的登錄標誌清除掉或者讓session失效等操作。之所以說他是半自動登錄主要還是因爲瀏覽器一關就需要重登。


全自動登錄(部分網站爲了解決瀏覽器關閉就需要重登而採取的措施):

  主要是利用cookie在瀏覽器關閉了還存在的原理來彌補session關閉了就不存在的缺陷。在session中沒有已登錄標誌優先去查看cookie中是否存在賬戶信息而進行驗證等流程,具體怎麼判斷登錄根據需求來做就行了。


總結:

  cookie和session可以給用戶帶來方便,但是需要注意的是安全問題,不要明文存儲用戶的賬號敏感信息存在cookie中,以及合理設置cookie和session的有效時長,還有就是session中不要存放過多東西,畢竟存放在服務器端需要佔用挺多空間的,一次性的東西儘量放request裏面。

發佈了37 篇原創文章 · 獲贊 38 · 訪問量 374萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章