Session機(jī)制
session機(jī)制采用的是在服務(wù)器端保持 HTTP 狀態(tài)信息的方案 君丁。
除了使用Cookie框往,Web應(yīng)用程序中還經(jīng)常使用Session來(lái)記錄客戶端狀態(tài)匙赞。Session是服務(wù)器端使用的一種記錄客戶端狀態(tài)的機(jī)制屡穗,使用上比Cookie簡(jiǎn)單一些厅目,相應(yīng)的也增加了服務(wù)器的存儲(chǔ)壓力番枚。
Session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是Cookie保存在客戶端瀏覽器中璧瞬,而Session保存在服務(wù)器上户辫。客戶端瀏覽器訪問(wèn)服務(wù)器的時(shí)候嗤锉,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上渔欢。這就是Session∥脸溃客戶端瀏覽器再次訪問(wèn)時(shí)只需要從該Session中查找該客戶的狀態(tài)就可以了奥额。
如果說(shuō)Cookie機(jī)制是通過(guò)檢查客戶身上的“通行證”來(lái)確定客戶身份的話,那么Session機(jī)制就是通過(guò)檢查服務(wù)器上的“客戶明細(xì)表”來(lái)確認(rèn)客戶身份访诱。Session相當(dāng)于程序在服務(wù)器上建立的一份客戶檔案垫挨,客戶來(lái)訪的時(shí)候只需要查詢客戶檔案表就可以了。
當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí)触菜,服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否包含了一個(gè)session標(biāo)識(shí)(即sessionId),如果已經(jīng)包含一個(gè)sessionId則說(shuō)明以前已經(jīng)為此客戶創(chuàng)建過(guò)session九榔,服務(wù)器就按照session id把這個(gè)session檢索出來(lái)使用(如果檢索不到,可能會(huì)新建一個(gè)涡相,這種情況可能出現(xiàn)在服務(wù)端已經(jīng)刪除了該用戶對(duì)應(yīng)的session對(duì)象哲泊,但用戶人為地在請(qǐng)求的URL后面附加上一個(gè)JSESSION的參數(shù))。如果客戶請(qǐng)求不包含sessionId催蝗,則為此客戶創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的sessionId切威,這個(gè)session id將在本次響應(yīng)中返回給客戶端保存。
常見(jiàn)方法:
// 設(shè)置屬性
session.setAttribute("login_user",userinfo);
// 獲取屬性
Userinfo userinfo = (Userinfo)session.getAttribute("login_user");
// 刪除屬性
session.removeAttribute(userinfo);
// getId
String sid = session.getId();
// 銷毀
session.invalidate();
// 持久化session
session.setMaxInactiveInterval(秒);
設(shè)置全局session過(guò)期時(shí)間,以分鐘為單位
<session-config>
<session-timeout>60</session-timeout>
</session-config>
注意:瀏覽器關(guān)閉丙号,session不會(huì)立刻銷毀先朦,它默認(rèn)的生命周期是30分鐘
Cookie和Session的比較
1缰冤、存放位置不同
Cookie保存在客戶端,Session保存在服務(wù)端喳魏。
2棉浸、存取方式的不同
Cookie是保存在客戶端瀏覽器的一段文本(name:value),不能存儲(chǔ)對(duì)象等一些復(fù)雜信息
Session是存儲(chǔ)在服務(wù)端的一個(gè)對(duì)象截酷,它可以存儲(chǔ)任意類型的數(shù)據(jù)
3涮拗、安全性的不同
Cookie是以明文的形式保存在客戶端的,對(duì)用戶是可見(jiàn)的迂苛,Session保存在服務(wù)端三热,對(duì)用戶不可見(jiàn)
4、對(duì)服務(wù)器造成的壓力不同
典型應(yīng)用
Cookie :保存登錄者用戶名密碼三幻、用戶的瀏覽歷史等
Session:保存登錄者信息就漾,購(gòu)物車信息,驗(yàn)證碼等
會(huì)話跟蹤四種方式
①Cookie
②Session
③URL重寫
<a href="<%=response.encodeURL("login.jsp") %>">重新登錄</a>
④隱藏域
<input type="hidden" name="jsessionid" value="${jsessionid}">