JavaEE session機制,javaeesession機制
JavaEE session機制
Http協議:
在講session之前,必須說下Http協議,HTTP是一個用戶端和伺服器端請求和應答的標準(TCP)。由HTTP用戶端發起一個請求,建立一個到伺服器指定連接埠(預設是80連接埠)的TCP串連。HTTP伺服器則在那個連接埠監聽用戶端發送過來的請求。一旦收到請求,伺服器(向用戶端)發回一個狀態行,比如"HTTP/1.1200 OK",和(響應的)訊息,訊息的訊息體可能是請求的檔案、錯誤訊息、或者其它一些資訊。
也就是Http協議是無狀態保持功能的,所以我們說下我們的session機制,就是為了儲存對應瀏覽器的身份識別功能的。
Session技術:
1,什麼是session(會話)
在伺服器端維護使用者狀態的一種狀態管理技術,其實現過程:當瀏覽器發給你文伺服器時,伺服器會建立一個對象(稱為session對象),
該對象有一個唯一的id號(稱為sessionId),然後,伺服器在預設情況下,會使用cookie技術,將sessionId發送給瀏覽器,
瀏覽器下次訪問伺服器時,會將sessionId攜帶給伺服器。伺服器會依據該sessionId尋找到對應的session對象(使用者的狀態可以寫到session對象上)。
2,如何建立session對象?
1),HttpSessionsession =request.getSession();//伺服器會建立一個符合HttpSesion介面標準定義的session對象
2),HttpSessionsession = request.getSession(boolean flag);
當flag為true:
瀏覽器發送請求給伺服器,伺服器會查看請求中有無sessionId,若沒有,則建立一個session對象;
若有,還要看要尋找的那個session對象是否仍然存在(因為某種原因,比如逾時限制,伺服器會刪掉session對象),有存在則返回;若不存在則建立一個新的對象
當flag為false:
瀏覽器發送請求給伺服器,伺服器會查看請求中有無sessionId,若沒有,返回一個null;
若有,還要看要尋找的那個session對象是否仍然存在(因為某種原因,比如逾時限制,伺服器會刪掉session對象),有存在則返回;若不存在則返回一個null
3),HttpSessionsession =request.getSession(); 等價於 HttpSessionsession = request.getSession(true);
3,session中的常用方法
session.setAttribute(Stringname,Object obj);
Objectsession.getAttribute(String name);//一般要得到後轉型
session.removeAttribute(Stringname);//去除某個屬性
Stringsession.getId();
4,設定sesion的最大不啟用時間
session.setMaxInactiveInerval(intseconds);
session.invalidate();//使之立即失效
5,使用設定檔,設定session的失效時間,
方式一,設定整個伺服器的配置失效時間,這個方式會影響到該伺服器上的所有應用。Tomcat預設30分鐘
TOMCAT_HOME/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
方式二,針對某個特定的應用進行配置失效時間
只需要修改web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
6,例子:
A,對要保護的頁面進行session驗證
session的驗證:
1,在登入成功後,寫入資料做一個session屬性添加
<%
session.setAttribute("user",user);
%>
2,在要保護的頁面加上session驗證代碼
<%
Objectobj = session.getAttribute("user");
if(null== obj){
response.sendRedirect("login.jsp");
}
%>
3,為了安全起見(有些時候瀏覽器沒關,session還是存在的),做一個安全退出
HttpSessionsession = request.getSession();
session.invalidate();//使之失效
response.sendRedirect("login.jsp");
B,購物車
Product:產品
idlong,
modelString,
picNameString,
proDescString,
pricedouble;
CartItem:商品條目
productProduct,
quantityint;
Cart:購物車
itemsList<CartItem>,
booleanadd(CartItem item),
List<CartItem>list(),
delete(longid),
clear(),
modify(longid, int quantity),
doublecost();
7,如果使用者禁止了cookie,如何?session機制?(如何?sessionId的跟蹤)
使用URL重寫機制:
如果要訪問的web組件(jsp或者servelt),需要session機制的支援(用到session的對象),
但是瀏覽器端卻禁止了cookie技術,那麼不能直接在地址欄輸入要訪問的web組件的定製,而要用伺服器產生的地址,
而應該使用伺服器產生的一個地址(該地址後會攜帶sessionId)
如何產生一個攜帶sessionId的地址?
A。對於連結、表單提交,使用response.encodeURL("url地址")。
比如:<ahref="<%=response.encodeURL("url")%>"></a>
B。對於重新導向,使用response.encodeRedirectURL("url地址")。
比如:response.sendRedirect(response.encodeRedirectURL("url地址") );
C。對於轉寄,無須考慮,因為在伺服器內部的跳轉,無須與瀏覽器互動,不予考慮
Session機制原理圖:
原文出自:http://blog.sina.com.cn/s/blog_6c21f6480100vllc.html
說說對javaee中的session的理解,你是怎使用session的?
在Java Servlet API中引入session機制來跟蹤客戶的狀態。session指的是在一段時間內,單個客戶與Web伺服器的一連串相關的互動過程。在一個session中,客戶可能會多次請求同一個網頁,也有可能請求訪問各種不同的伺服器資源。例如在電子郵件應用中,從一個客戶登入到電子郵件系統開始,經過收信,寫信,和發信等,直至退出郵件系統,整個過程為一個session。再比如,在網上書店應用中,從一個客戶開始購物,到最後結賬,整個過程為一個session。
會話的建立:HttpSession session = request.getSession(boolean value);
HttpSession session = request.getSession();
會話的使用:javax.servlet.http.HttpSession介面中定義的方法,我們常用的是有關進行資料存取的方法。
session.setAttribute(String name , Object value);
session.getAttribute(String name);
對於JavaEE中session的問題
false時,它不會建立Session,而是使用現成的Session對象。