Java web基礎總結六之—— Cookie與Session

Java web基礎總結六之—— Cookie與Session

     當我們在使用瀏覽器與服務器進行會話的過程中,就必然會產生一些數據。這個時候就需要對數據進行保存。比如常見的購物網站購物車信息的保存。保存客戶端與服務器會話數據的兩種技術是Cookie與Session。

 

一.Cookie
1.什麼是Cookie?

      Cookie是保存在客戶端的,以name,value的形式保存。當用戶使用瀏覽器訪問服務器產生數據時,服務器程序把每個用戶的數據以cookie的形式寫給用戶各自的瀏覽器。當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶着各自的數據去。這樣,web服務器就可以從請求中獲得用戶的數據了。

 

2.java 中實現cookie的相應的API

       javax.servlet.http.Cookie類是java中的一個類。它用於創建一個Cookie,java的Response接口定義了一個addCookie方法,它可以在其響應頭中增加一個相應的Set-Cookie頭字段。同樣,request接口中也定義了一個getCookies方法,它用於獲取客戶端提交的Cookie。Cookie類有以下的一些常用的方法:

publicCookie(String name,String value)  構造方法

setValue與getValue   設值與取值   

setMaxAge與getMaxAge  設置和獲取cookie的最長存在的時間,單位爲秒。

setPath與getPath方法   設置路徑,可以實現同一應用服務器內共享cookie

setDomain與getDomain  設置主機,可以實現跨域共享cookie

getName方法           獲取cookie的名字

 

3. 操作cookie需要注意的一些問題

    Cookie的setMaxAge的方法的單位爲秒,當設置爲-1時,瀏覽器關閉cookie從瀏覽器自動刪除。

      一個Cookie只能標識一種信息,它必須含有一個name和一個value,一個WEB應用可以給一個WEB瀏覽器發送多個Cookie,同樣的,用戶的瀏覽器也可以存儲多個WEB站點寫入的Cookie。

瀏覽器存儲的cookie的個數和大小是有限制的,一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制爲4KB。

       cookie默認是用戶退出瀏覽器之後即被刪除。若希望瀏覽器將該cookie存儲在磁盤上,服務器程序就需要使用maxAge,並給出一個以秒爲單位的時間。如果設置爲0則是命令瀏覽器刪除該cookie。

        比較重要,也比較容易忽略的是,刪除cookie時,path和domin必須一致,否則不會刪除.所以當我們想要刪除一個cookie時,不光要設置maxAge爲0,還需要把他的path和domin也設置的和原來的一樣,以前做一個項目的時候,遇到過這個問題。

 


二.Session
1.      什麼是Session?

        和cookie不同的是,Session是保存在服務器端的,服務器在運行時可以爲每一個用戶的瀏覽器創建一個其獨享的session對象,session是用戶瀏覽器獨享的,用戶瀏覽器在訪問服務器時,產生的數據也可以放在各自的session中,當用戶再去訪問服務器中的其它web資源時,其它web資源再從用戶各自的session中取出數據爲用戶服務。

 

2.      Session的API

         在java中,有一個接口,javax.servlet.http.HttpSession。它主要有下面一些方法。

         getId 此方法返回唯一的標識,這些標識爲每個session而產生。

     getCreationTime()返回session被創建的時間。返回的是一個long型的從1970年1月1日到創建時間的毫秒數,即時間戳。

     GetLastAccessedTime 返回session最後被客戶發送的時間。最小單位爲千分之一秒。

     getAttribute 取session中的一個對象的值,由於這個方法的返回值是Object,所以要進行強制類型的轉換。

         setAttribute 設置一個key和value。相同的key時,新的值會替換掉任何以前的值。類似於HashMap.需要注意的是,設置的值爲簡單類型時,會自動裝箱成對應的包裝類。

 

3.      Session的一些細節問題

        服務器爲每個用戶瀏覽器創建一個session對象,默認情況下,一個瀏覽器獨佔一個session對象。因此,在需要保存用戶數據時,服務器程序可以把用戶數據寫到用戶瀏覽器獨佔的session中,當用戶使用瀏覽器訪問這個web應用的其他資源時,可以從用戶的session中取出該用戶的數據,爲用戶服務。Session對象由服務器創建,保存在服務器的內存中,我們可以調用request對象的getSession方法得到服務器的session對象。

        當一個session長時間不在服務器活動時,就會被從服務器內存中清除,此時Session便失效。Tomcat中的Session的默認失效時間爲20分鐘。

         用戶瀏覽器傳遞上來的cookie中,會有一個保存諸如sessionID之類的cookie。所以服務器可以識別客戶端瀏覽器對應的Session。所以當客戶端禁用Cookie後,可以URL重寫解決這個問題。主要有兩個方法:response. encodeRedirectURL(java.lang.String url) 用於對sendRedirect方法後的url地址進行重寫。response.encodeURL(java.lang.String url)用於對錶單action和超鏈接的url地址進行重寫。

 

  

三.Cookie與Session的區別

1.      Cookie是把用戶的數據寫給用戶的瀏覽器,保存在瀏覽器中。Session是把用戶的數據寫到用戶獨佔的session中,保存在服務器端。

2.      一個Cookie對象代表一個cookie,只能表示一個name和value,cookie中保存的是字符串。。Session類似於一個服務器端的一個基於HashMap的緩存。可以放入多個具有key,value的鍵值對的屬性。value可以是任意的對象。

3.      Session沒有path和domain,同一個用戶在訪問一個網站期間,所有的session在任何一個地方都可以訪問到。而cookie中如果設置了路徑參數,那麼同一個網站中不同路徑下的cookie互相是訪問不到的。

4.      session是以cookie爲基礎的, 服務器需要通過客戶端傳來的一個名爲JSESSIONID的cookie 來找到它對應的session。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章