<sub id="73hld"><meter id="73hld"></meter></sub><rp id="73hld"><big id="73hld"><listing id="73hld"></listing></big></rp>

    <th id="73hld"><meter id="73hld"><dfn id="73hld"></dfn></meter></th>

      <th id="73hld"></th>
          <th id="73hld"><form id="73hld"><dfn id="73hld"></dfn></form></th>
          書籍文庫  |  文檔資料  |  最近更新  |  MAP  |  TAG  | 
          注冊
          手機版
          就愛閱讀網
          當前位置:首頁 > 電腦辦公 > 系統/上網/安全 > 同一個tomcat不同項目的session共享問題

          同一個tomcat不同項目的session共享問題

          分享人:zp0628 來源:互聯網 時間:2018-10-09 14:24:14 閱讀:0

          問題描述:
          session常常用來存儲一些公共信息供不同頁面訪問,比如用戶登錄信息。訪問同一個tomcat下的不同項目所創建的session是不一樣的。自然地面臨了如何共享session的問題。

          解決思路:
          解決數據共享問題的思路無非兩種
          1、找個公共的地方存放共享的數據
          2、不同數據源之間做數據同步

          解決方案:
          1、修改tomcat的server.xml文件
          每一個web應用程序都有唯一一個ServletContext實例對象,被該web應用下面的每一個servlet共享。通過修改tomcat的server.xml,使不同web應用的ServletContext可以互相訪問。然后,用ServletContext的setAttribute()方法把session存入ServletContext中,在另一個web程序就可以用getAttribute()方法取得傳遞過來的session。

          server.xml文件修改如下:

           <Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true">
              <Context path="/WebappA"  debug="9" reloadable="true" crossContext="true"/> //WebappA為項目名,crossContext="true"是關鍵
              <Context path="/WebappB"  debug="9" reloadable="true" crossContext="true"/>
          </Host>
          • 1
          • 2
          • 3
          • 4

          crossContext屬性的意思是:如果設置為true,你可以通過ServletContext.getContext() 調用另外一個WEB應用程序,獲得ServletContext 然后再調用其getAttribute() 得到你要的對象。

          java代碼如下:

          WebappA:

          HttpSession session = request.getSession();
          session.setAttribute("userId", "test");
          ServletContext ContextA =session .getServletContext();
          ContextA.setAttribute("session", session );
          • 1
          • 2
          • 3
          • 4

          WebappB:

          HttpSession sessionB = request.getSession();  
          ServletContext ContextB = sessionB.getServletContext();  
          ServletContext ContextA= ContextB.getContext("/WebappA");// 這里面傳遞的是 WebappA的虛擬路徑
          HttpSession sessionA =(HttpSession)ContextA.getAttribute("session");
          System.out.println("userId: "+sessionA.getAttribute("userId"));
          • 1
          • 2
          • 3
          • 4
          • 5

          2、用數據庫存放session數據
          將session數據存入數據庫,不同web程序讀取數據庫數據即可。這樣做的好處是實現簡單,缺點是每次請求都要讀寫一次數據庫,加大了系統開銷。

          3、用cookie代替session
          cookie是存放在本地硬盤上的文件,適合用于存放小量數據,且可以通過cookie.setPath(“/”)方法設置cookie為同一tomcat下的所有webapp共享。cookie.setPath(“/”)方法的參數”/”表示tomcat的webapps文件夾下的所有應用共享該cookie。

          java代碼
          寫cookie:

          SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式
          Cookie cookie = new Cookie("loginTime",df.format(new Date()));
          cookie.setPath("/"); //Tomcat的webapps目錄下共享
          context.getHttpResponse().addCookie(cookie);
          • 1
          • 2
          • 3
          • 4

          讀cookie:

          Cookie[] cookies = context.getHttpRequest().getCookies();
                  for(Cookie c :cookies ){
                      if(c.getName().equals("loginTime")){
                          System.out.println("loginTime: " + c.getValue());
                      }
                  }
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6

          百度搜索“就愛閱讀”,專業資料,生活學習,盡在就愛閱讀網92to.com,您的在線圖書館!

          熱點閱讀

          網友最愛

          吉林快三走势图

          <sub id="73hld"><meter id="73hld"></meter></sub><rp id="73hld"><big id="73hld"><listing id="73hld"></listing></big></rp>

            <th id="73hld"><meter id="73hld"><dfn id="73hld"></dfn></meter></th>

              <th id="73hld"></th>
                  <th id="73hld"><form id="73hld"><dfn id="73hld"></dfn></form></th>

                  <sub id="73hld"><meter id="73hld"></meter></sub><rp id="73hld"><big id="73hld"><listing id="73hld"></listing></big></rp>

                    <th id="73hld"><meter id="73hld"><dfn id="73hld"></dfn></meter></th>

                      <th id="73hld"></th>
                          <th id="73hld"><form id="73hld"><dfn id="73hld"></dfn></form></th>