以前用session時(shí)只知道session是和服務(wù)器連接的一個(gè)會(huì)話,有幾個(gè)常用的接口。
這兩天仔細(xì)看了下這方面的資料,在這里和大家一起分享,如果有寫的不正確的地方,請(qǐng)指正,謝謝。
下面我們?cè)谝粋€(gè)servlet中寫測(cè)試程序,class名為SeesinInfoServlet,我們一般在程序中取得session是用
request的getSession()來(lái)取得容器中的session,該方法當(dāng)容器中已經(jīng)存在了該session的時(shí)候,返回已經(jīng)存
在的session,否則創(chuàng)建一個(gè)新的session,然后返回創(chuàng)建的session。request還有另外一個(gè)getSession()的重
載方法:HttpSession getSession(boolean create),一般不常用,大家可以查j2ee的api,每個(gè)session都對(duì)應(yīng)
唯一的sessionId,sessionId可以通過(guò)getId()方法獲得,session是維持客服端和服務(wù)器端狀態(tài)的一個(gè)東西,是
通過(guò)sessionId來(lái)一一對(duì)應(yīng)的,客服端的sessionId一般保存在cookie中,如果客服端的cookie沒(méi)有被禁掉的話
。如果cookie被禁掉,我們可以通過(guò)URL重寫來(lái)實(shí)現(xiàn)把sessionId傳到服務(wù)器。請(qǐng)看下面程序。
PrintWriter pw = res.getWriter();這一句取得服務(wù)器端反映給客服端的輸出流。
HttpSession s = req.getSession();取得session。
req.getRequestedSessionId();這一句取得客服端cookie中的sessionId,如果cookie沒(méi)有被禁掉的話,第一次訪問(wèn)為null,因?yàn)檫€沒(méi)創(chuàng)建session,以后每次都和
s.getId() 取得的值一致。
req.isRequestedSessionIdFromCookie();如果沒(méi)有禁掉cookie,返回true。
req.isRequestedSessionIdFromURL();是否通過(guò)URL重寫取得sessionId,
//pw.println("<a href="+ res.encodeURL("SessionInfoServlet")+">refresh</a>");其中的res.encodeURL(String),即為URL重寫,我們可以看到地址欄后會(huì)跟sessionId。
如果不是URL重寫,則地址欄中沒(méi)有sessionId。
這兩天仔細(xì)看了下這方面的資料,在這里和大家一起分享,如果有寫的不正確的地方,請(qǐng)指正,謝謝。
下面我們?cè)谝粋€(gè)servlet中寫測(cè)試程序,class名為SeesinInfoServlet,我們一般在程序中取得session是用
request的getSession()來(lái)取得容器中的session,該方法當(dāng)容器中已經(jīng)存在了該session的時(shí)候,返回已經(jīng)存
在的session,否則創(chuàng)建一個(gè)新的session,然后返回創(chuàng)建的session。request還有另外一個(gè)getSession()的重
載方法:HttpSession getSession(boolean create),一般不常用,大家可以查j2ee的api,每個(gè)session都對(duì)應(yīng)
唯一的sessionId,sessionId可以通過(guò)getId()方法獲得,session是維持客服端和服務(wù)器端狀態(tài)的一個(gè)東西,是
通過(guò)sessionId來(lái)一一對(duì)應(yīng)的,客服端的sessionId一般保存在cookie中,如果客服端的cookie沒(méi)有被禁掉的話
。如果cookie被禁掉,我們可以通過(guò)URL重寫來(lái)實(shí)現(xiàn)把sessionId傳到服務(wù)器。請(qǐng)看下面程序。
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.Date;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class SeesinInfoServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- PrintWriter pw = res.getWriter();
- HttpSession s = req.getSession();
- pw.write("New Session:" + s.isNew() + "<br>");
- pw.write("Session Id:" + s.getId() + "<br>");
- pw.write("Session Create Time:" + new Date(s.getCreationTime()) + "<br>");
- pw.write("<br>");
- pw.println("<h3>Request Information</h3>");
- pw.println("Session Id from Request:" + req.getRequestedSessionId()+ "<br>");
- pw.println("Session Id via Cookie:" + req.isRequestedSessionIdFromCookie()+ "<br>");
- pw.println("Session Id rewritten Url:" + req.isRequestedSessionIdFromURL()+ "<br>");
- pw.println("valid session id:" + req.isRequestedSessionIdValid()+ "<br>");
- //pw.println("<a href="+ res.encodeURL("SessionInfoServlet")+">refresh</a>");
- pw.println("<a href='SessionInfoServlet'>refresh</a>");
- pw.close();
- }
- }
PrintWriter pw = res.getWriter();這一句取得服務(wù)器端反映給客服端的輸出流。
HttpSession s = req.getSession();取得session。
req.getRequestedSessionId();這一句取得客服端cookie中的sessionId,如果cookie沒(méi)有被禁掉的話,第一次訪問(wèn)為null,因?yàn)檫€沒(méi)創(chuàng)建session,以后每次都和
s.getId() 取得的值一致。
req.isRequestedSessionIdFromCookie();如果沒(méi)有禁掉cookie,返回true。
req.isRequestedSessionIdFromURL();是否通過(guò)URL重寫取得sessionId,
//pw.println("<a href="+ res.encodeURL("SessionInfoServlet")+">refresh</a>");其中的res.encodeURL(String),即為URL重寫,我們可以看到地址欄后會(huì)跟sessionId。
如果不是URL重寫,則地址欄中沒(méi)有sessionId。