標籤:session cookie java web web應用 java
Java web基礎總結六之—— Cookie與Session
當我們在使用瀏覽器與伺服器進行會話的過程中,就必然會產生一些資料。這個時候就需要對資料進行儲存。比如常見的購物網站購物車資訊的儲存。儲存用戶端與伺服器會話資料的兩種技術是Cookie與Session。
一.Cookie1.什麼是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也設定的和原來的一樣,以前做一個項目的時候,遇到過這個問題。
二.Session1. 什麼是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。
Java web基礎總結六之—— Cookie與Session