JavaEE session機制,javaeesession機制

來源:互聯網
上載者:User

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對象。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.