1.什么是Session?
服務(wù)器端為保存狀態(tài)而創(chuàng)建的一個(gè)特殊的對(duì)象趁猴。
2.工作原理
瀏覽器訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)創(chuàng)建一個(gè)session對(duì)象(該對(duì)象有一個(gè)唯一的id,一般稱之為sessionId),服務(wù)器會(huì)將這個(gè)sessionId發(fā)送給瀏覽器(默認(rèn)以cookie的方式發(fā)送),瀏覽器會(huì)將sessionId保存下來(lái)(保存在內(nèi)存)彪见;當(dāng)瀏覽器再次訪問(wèn)服務(wù)器時(shí)儡司,會(huì)將sessionId發(fā)送給服務(wù)器,服務(wù)器依據(jù)sessionId找到對(duì)應(yīng)的session對(duì)象余指。
(3)獲取session對(duì)象
1)HttpSession s =request.getSession(boolean flag);
a.flag為true時(shí)
先查看請(qǐng)求當(dāng)中有沒(méi)有sessionId,如果沒(méi)有捕犬,則創(chuàng)建session對(duì)象;如果有sessionId,則依據(jù)該sessionId去查找對(duì)應(yīng)的session對(duì)象(如果找到了酵镜,則返回碉碉,找不到,則創(chuàng)建一個(gè)新的session對(duì)象)淮韭。
b.flag為false時(shí)
先查看請(qǐng)求當(dāng)中有沒(méi)有sessionId,如果沒(méi)有垢粮,返回null;如果有sessionId,則依據(jù)該sessionId
去查找對(duì)應(yīng)的session對(duì)象(如果找到了靠粪,則返回蜡吧,找不到,返回null)庇配。
2)HttpSession s =request.getSession();等價(jià)于request.getSession(true);
(4)綁訂數(shù)據(jù)相關(guān)的幾個(gè)方法
session.setAttribute(String name,Object obj)
Object session.getAttribute(String name);
removeAttribute(String name);
代碼示例:
(5)session超時(shí)
1)什么是session超時(shí)
服務(wù)器會(huì)將空間時(shí)間過(guò)長(zhǎng)的session對(duì)象刪除掉斩跌。
注:默認(rèn)的超時(shí)時(shí)間限制是30分鐘。
可以修改服務(wù)器缺省的超時(shí)時(shí)間限制30捞慌。
2)session.setMaxInactiveInterval(int seconds)
(6)刪除session
session.invalidate()
3. session驗(yàn)證
step1.登錄成功之后,在session對(duì)象上綁訂一些數(shù)據(jù)柬批,比如session.setAttribute("user",user);
step2.當(dāng)用戶訪問(wèn)需要保護(hù)的資源的時(shí)候(只有登錄成功才能訪問(wèn)的資源)? ??
Object obj = session.getAttribute("user");
if(obj == null){
//沒(méi)有登錄
response.sendRedirect("login.jsp");
}
代碼示例:
4. 驗(yàn)證碼(擴(kuò)展)
練習(xí): 生成一個(gè)長(zhǎng)度固定為5個(gè)字符啸澡,并且這些字符要求從(A~Z,0~9)中隨機(jī)選取,比如X09BD
代碼示例: