什麼是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裏面。