前言:
狀態(tài)跟蹤有四種方式:1.隱藏表單域方式 2.附加URL方式 3.Cookie方式 4.封裝的Session方式。前三種是傳統(tǒng)的做法,都有缺點(diǎn)。所以現(xiàn)在一般用Session方式,session是綜合采用了附加URL和Cookie兩種技術(shù),可以用Cookie的時(shí)候,用Cookie,否則用附加URL,而所有這一切都被Java語言類庫(kù)所封裝好了。
Part 1 什么是隱藏表單域?
就是利用隱藏表單域
<input type="hiden" name="passwd" value="1234">當(dāng)提交Form的時(shí)候,Server端象獲取普通字段那樣獲取參數(shù)password的值,這種請(qǐng)求方式一般是post。
Part 2 什么是附加URL?
就是請(qǐng)求url上附加參數(shù),比如http://localhost/abc.jsp?passwd=1234,當(dāng)提交Form的時(shí)候,Server端就可以獲取passwd這個(gè)參數(shù)。與隱藏表單域不同的是,顯然這種是get請(qǐng)求方式。
Part 3 什么是Cookie?
Cookie涉及到文件,瀏覽器收到Server端的相應(yīng)頭后,把那一組信息組裝成文件放到系統(tǒng)的某個(gè)地方,當(dāng)下次請(qǐng)求的時(shí)候,文件內(nèi)容隨這請(qǐng)求一起發(fā)送到服務(wù)器上,讓服務(wù)器辨認(rèn)是否時(shí)原來的用戶。Cookie可以設(shè)置有效期。示例代碼如下:
Cookie newcookie=new Cookie("key","value");
newcookie.setMaxAge(86400);
response.addCookie(newcookie);Part 4 什么時(shí)Session?
Jsp的HttpSession綜合了Cookie和附加URL兩種技術(shù),誕生了新的驗(yàn)證機(jī)制。程序員不必要考慮客戶瀏覽器是否支持Cookie。Session也可以設(shè)置有效期。示例代碼如下:
session.setAttribute("user",user);
session.setMaxInactiveInterval(10);與其它技術(shù)不同的是,只要添加到session的對(duì)象實(shí)現(xiàn)了HttpSessionBindingListener接口,當(dāng)Session資源被Server釋放之前,可以對(duì)該對(duì)象采取永久保存等操作。即需要實(shí)現(xiàn)valueBound(...)和valueUnbound(...)方法。對(duì)象加入session是調(diào)用valueBound,對(duì)象從session中釋放時(shí)調(diào)用valueUnbound.這項(xiàng)功能比較有用,比如購(gòu)物車的內(nèi)容,可以為用戶永久保存。