Cookie與Session的聯繫與區別

什麼是Session?Session何時產生?算法

   Session:在計算機中,尤爲是在網絡應用中,稱爲「會話控制」。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。數據庫

當用戶請求來自應用程序的 Web 頁時,若是該用戶尚未會話,則 Web 服務器將自動建立一個 Session 對象。當會話過時或被放棄後,服務器將終止該會話。瀏覽器

   簡單來講,客戶端瀏覽服務端的時候,服務端把客戶端信息以某種形式記錄在服務器上,這種記錄就是Session。因此Session是保存在服務器上的。安全

 

爲何要使用Session?什麼是SessionID?服務器

由於不少第三方能夠獲取到這個Cookie,服務器沒法判斷Cookie是否是真實用戶發送的,因此Cookie能夠僞造,僞造Cookie實現登陸進行一些HTTP請求。cookie

若是從安全性上來說,Session比Cookie安全性稍微高一些,咱們先弄清一點,SessionID是從哪裏來的,sessionID是如何使用的:客戶端第一次請求Session對象時候,服務器會爲客戶端建立一個session,並將經過特殊算法算出一個session的ID,下次請求資源時(Session未過時),瀏覽器會將sessionID(實質是cookie)放置到請求頭中,服務器接收到請求後就獲得該請求的SessionID,服務器找到該id的session返還給請求者使用。網絡

一個會話只能有一個session對象,對session來講是隻看sessionID。按理來講,只要知道SessionID就能夠進行僞登陸。可是你想獲得這個sessionID,得知作別人何時進行登陸。同時sessionID是加密的,session過時時sessionID也會失效,想在短期內功破加了密的sessionID有點難度。session

 

Session的用途網站

  • Session能夠記錄用戶的登陸與行爲數據,即記錄下用戶目前訪問服務器上的那些內容,狀態是什麼,而考慮到這些數據用戶修改的隨意性很大,並無必要直接存儲在數據庫中。加密

  • 在用戶執行刷新操做時,即再次訪問服務器時,能夠直接根據Session,打開用戶上次訪問時網頁的狀態(如用戶輸入的表單內容等等),爲用戶帶來更優的體驗,提供個性化服務。

  • 用戶的session信息很是關鍵,它記錄了用戶在進入頁面、查看結果、點擊結果以及後繼的操做(好比翻頁、加購物車等)。只有經過session信息才能把用戶的行爲聯繫起來,構建出完整的模型,所以從海量數據中把每個用戶全部session的操做都完整地挖掘出來很是重要。

 

session的實現原理

服務器會爲每個訪問服務器的用戶建立一個session對象,而且把session對象的id保存在本地cookie上,只要用戶再次訪問服務器時,帶着session的id,服務器就會匹配用戶在服務器上的session,根據session中的數據,還原用戶上次的瀏覽狀態或提供其餘人性化服務。

 

瀏覽器禁用cookie後如何實現session

若是客戶端瀏覽器將Cookie功能禁用,或者不支持Cookie怎麼辦?例如,絕大多數的手機瀏覽器都不支持Cookie。Java Web提供了另外一種解決方案:URL地址重寫。

 

URL地址重寫

URL重寫就是首先得到一個進入的URL請求而後把它從新寫成網站能夠處理的另外一個URL的過程。舉個例子來講,若是經過瀏覽器進來的URL是「UserProfile.aspx?ID=1」那麼它能夠被重寫成 「UserProfile/1.aspx」,這樣的URL,這樣的網址能夠更好的被網站所閱讀。

 

如何經過URL地址重寫實現session的id傳輸

URL地址重寫的原理是將該用戶Session的id信息重寫到URL地址中。服務器可以解析重寫後的URL獲取Session的id。這樣即便客戶端不支持Cookie,也可使用Session來記錄用戶狀態。

HttpServletResponse類提供了encodeURL(String url)實現URL地址重寫,該方法會自動判斷客戶端是否支持Cookie。若是客戶端支持Cookie,會將URL原封不動地輸出來。若是客戶端不支持Cookie,則會將用戶Session的id重寫到URL中。

 

Session的生命週期?

   根據需求設定,通常來講,半小時。

舉個例子,你登陸一個服務器,服務器返回給你一個sessionID,登陸成功以後的半小時以內沒有對該服務器進行任何HTTP請求,半小時後你進行一次HTTP請求,會提示你從新登陸。這就是咱們常說的Session已失效,也就是說就算的session_id還存在,可是session照樣會結束本身的生命週期。

 

Cookie與Session之間有哪些區別或者是優缺點?

知道了Cookie與Session,咱們來作一些簡單的總結:

   一、Cookie能夠存儲在瀏覽器或者本地,session只能存在服務器

   二、session比cookie更具備安全性

   三、由於Session是存儲在服務器當中的,因此Session過多,可能會對服務器產生壓力。在我看來,Session的生命週期算是減小服務器壓力的一種方式。

   四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie

相關文章
相關標籤/搜索