java 之 會話管理

會話

問題:什麼是會話?
    會話可簡單理解爲:用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然後關閉瀏覽器,整個過程稱之爲一個會話。
會話過程中要解決的一些問題?
每個用戶在使用瀏覽器與服務器進行會話的過程中,不可避免各自會產生一些數據,程序要想辦法爲每個用戶保存這些數據。
例如:用戶點擊超鏈接通過一個servlet購買了一個商品,程序應該想辦法保存用戶購買的商品,以便於用戶點結帳servlet時,結帳servlet可以得到用戶購買的商品爲用戶結帳。
思考:用戶購買的商品保存在request或servletContext中行不行?

保存會話數據的兩種技術

Cookie
    Cookie是客戶端技術,程序把每個用戶的數據以cookie的形式寫給用戶各自的瀏覽器。當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶着各自的數據去。這樣,web資源處理的就是用戶各自的數據了。
HttpSession
    Session是服務器端技術,利用這個技術,服務器在運行時可以爲每一個用戶的瀏覽器創建一個其獨享的HttpSession對象,由於session爲用戶瀏覽器獨享,所以用戶在訪問服務器的web資源時,可以把各自的數據放在各自的session中,當用戶再去訪問服務器中的其它web資源時,其它web資源再從用戶各自的session中取出數據爲用戶服務。

Cookie技術–放映

這裏寫圖片描述

Session–放映

這裏寫圖片描述

Cookie API

javax.servlet.http.Cookie類用於創建一個Cookie,response接口中定義了一個addCookie方法,它用於在其響應頭中增加一個相應的Set-Cookie頭字段。 同樣,request接口中也定義了一個getCookies方法,它用於獲取客戶端提交的Cookie。Cookie類的方法: 
public Cookie(String name,String value)
setValue與getValue方法 
setMaxAge與getMaxAge方法 (秒)
setPath與getPath方法
setDomain與getDomain方法
getName方法 

Cookie應用

這裏寫圖片描述

Cookie細節

一個Cookie只能標識一種信息,它至少含有一個標識該信息的名稱(NAME)和設置值(VALUE)。 
一個WEB站點可以給一個WEB瀏覽器發送多個Cookie,一個WEB瀏覽器也可以存儲多個WEB站點提供的Cookie。
瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制爲4KB。
如果創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie(即存儲在瀏覽器的內存中),用戶退出瀏覽器之後即被刪除。若希望瀏覽器將該cookie存儲在磁盤上,則需要使用maxAge,並給出一個以秒爲單位的時間。將最大時效設爲0則是命令瀏覽器刪除該cookie。
注意,刪除cookie時,path必須一致,否則不會刪除

Cookie應用

這裏寫圖片描述

顯示上次瀏覽商品的實現過程

這裏寫圖片描述

HttpSession

    在WEB開發中,服務器可以爲每個用戶瀏覽器創建一個會話對象(session對象),注意:一個瀏覽器獨佔一個session對象(默認情況下)。因此,在需要保存用戶數據時,服務器程序可以把用戶數據寫到用戶瀏覽器獨佔的session中,當用戶使用瀏覽器訪問其它程序時,其它程序可以從用戶的session中取出該用戶的數據,爲用戶服務。
Session和Cookie的主要區別在於:
Cookie是把用戶的數據寫給用戶的瀏覽器。
Session技術把用戶的數據寫到用戶獨佔的session中。
Session對象由服務器創建,開發人員可以調用request對象的getSession方法得到session對象。

這裏寫圖片描述

session實現原理

這裏寫圖片描述

session案例-防止表單重複提交

session案例-防止表單重複提交
這裏寫圖片描述
這裏寫圖片描述

session案例一次性校驗碼

一次性驗證碼的主要目的就是爲了限制人們利用工具軟件來暴力猜測密碼。 
服務器程序接收到表單數據後,首先判斷用戶是否填寫了正確的驗證碼,只有該驗證碼與服務器端保存的驗證碼匹配時,服務器程序纔開始正常的表單處理流程。 
密碼猜測工具要逐一嘗試每個密碼的前題條件是先輸入正確的驗證碼,而驗證碼是一次性有效的,這樣基本上就阻斷了密碼猜測工具的自動地處理過程。 

IE禁用Cookie後的session處理

實驗演示禁用Cookie後servlet共享數據導致的問題。
解決方案:URL重寫
    response. encodeRedirectURL(java.lang.String url) 
    用於對sendRedirect方法後的url地址進行重寫。
    response. encodeURL(java.lang.String url)
    用於對錶單action和超鏈接的url地址進行重寫 
附加:
    Session的失效  invalidate()立刻實效
    Web.xml文件配置session失效時間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章