Chinaorg

          于千萬人之中,遇見你所遇見的人;于千萬年之中,時間的無涯荒野里,沒有早一步,也沒有晚一步,剛巧趕上了
          我不去想是否能夠成功,既然選擇了遠方,便只顧風(fēng)雨兼程; 我不去想,身后會不會襲來寒風(fēng)冷雨,既然目標是地平線,留給世界的只能是背影
          posts - 20, comments - 6, trackbacks - 0, articles - 0

          Session的持久化

          Posted on 2006-10-24 21:36 chinaorg 閱讀(1577) 評論(4)  編輯  收藏

          ?

          當一個 Session 開始時, Servlet 容器會為 Session 創(chuàng)建一個 HttpSession 對象。 Servlet 容器在某些情況下把這些 HttpSession 對象從內(nèi)存中轉(zhuǎn)移到文件系統(tǒng)或數(shù)據(jù)庫中,在需要訪問 HttpSession 信息時再把它們加載到內(nèi)存中。

          ?

          Session 的持久化是由 Session Manager 來管理的。 Tomcat 提供了兩個實現(xiàn)類

          l???????? org.apache.catalina.session.StandardManager

          l???????? org.apache.catalina.session.PersistentManager

          ?

          1.???????? StandardManager

          Standard Manager 是默認的 Session Manager. 它的實現(xiàn)機制為:當 Tomcat 服務(wù)器關(guān)閉或重啟,或者 web 應(yīng)用被重新加載時,會對在內(nèi)存中的 HttpSession 對象進行持久化,把它們保存到文件系統(tǒng)中,默認的文件為:

          <CATALINA_HOME>/work/Catalina/hostname/applicationname/SESSIONS.ser

          2.???????? PersistentManager

          PersistentManager 能夠把 Session 對象保存到 Session Stor 中,它提供了比 StandardManager 更為靈活的 Session 管理功能,它具有以下功能:

          l???????? 對內(nèi)存中的 HttpSession 對象進行持久化,把它們保存到 Session Store

          l???????? 具有容錯功能,及時把 Session 備份到 Session Store 中,當 Tomcat 服務(wù)器意外關(guān)閉后再重啟時,可以從 Session Store 中恢復(fù) Session 對象。

          l???????? 可以靈活控制在內(nèi)存中的 Session 數(shù)目,將部分 Session 轉(zhuǎn)移到 Session Store

          Tomcat 實現(xiàn)持久化 Session Store 的接口為 org.apache.Catalina.store, 目前提供了兩個實現(xiàn)這一接口的類: org.apache.Catalina.FileStore org.apache.Catalina.JDBCStore.

          下面討論如何配置 PersistentManager 以及兩種持久化 Session Store.

          ?

          配置 FileStore

          ?

          FileStore HttpSession 對象保存在一個文件中。這個文件的默認目錄為

          <CATALINA_HOME>/work/Catalina/hostname/applicationname. 每個 HttpSession 對象都會對應(yīng)一個文件,它以 Session ID 作為文件名,擴展名為: .session.

          ?

          例:為 helloapp 應(yīng)用配置 FileStore

          Server.xml

          <!-- configure FileStore -->

          <Context path="/helloapp" docBase="helloapp" debug="0"

          reloadable="true">

          ?

          <Manager className="org.apache.catalina.session.PersistentManager" >

          debug=0;

          saveOnRestart="true"

          maxActiveSessions="-1"

          minIdleSwap="-1"

          maxIdleSwap="-1"

          maxIdleBackup="-1"

          <Store className="org.apache.catalina.session.FileStore" directory="mydir" />

          </Manager>

          ?

          </Context>

          ?

          ?

          配置 JDBCStore

          ?

          JDBCStore HttpSession 對象保存在數(shù)據(jù)為庫的一張表中。

          ?

          例: MySQL 中創(chuàng)建 Session 表的步驟,假定表的名字為 tomcat_sessions, 這張表所在的數(shù)據(jù)庫為 tomcatsessionDB.

          ?

          CREATE DATABASE tomcatsessionDB;

          Use tomcatsessionDB

          Create table tomcat_session(

          session_id? varchar(100) not null primary key,

          valid_session chart(1)not null,

          max_inactive int not null,

          last_access bigint not null,

          app_name varchar (255),

          session_data mediumblob,

          KEY kapp_name(app_name)

          };

          ?

          ?

          Server.xml

          <!-- configure JDBCStore -->

          <Context path="/helloapp" docBase="helloapp" debug="0"

          reloadable="true">

          ?

          <Manager className="org.apache.catalina.session.PersistentManager" >

          debug=99;

          saveOnRestart="true"

          maxActiveSessions="-1"

          minIdleSwap="-1"

          maxIdleSwap="-1"

          maxIdleBackup="-1"

          <Store className="org.apache.catalina.session.JDBCStore"

          driverName="com.mysql.jdbc.Driver"

          connectionURL="jdbc:mysql://localhost/tomcatsessionDB?user=dbuser;password=1234"

          sessionTable="tomcat_sessions"

          sessionIdCol="session_id"

          sessionDataCol="session_data"

          sessionValidCol="valid_session"

          sessionMaxInactiveCol="max_inactive"

          sessionLastAccessedCol="last_access"

          sessionAppCol="app_name"

          checkInterval="60"

          debug="99"

          />

          </Manager>

          ?

          </Context>

          ?

          Feedback

          # re: Session的持久化  回復(fù)  更多評論   

          2007-12-23 13:15 by panrui
          ffff

          # re: Session的持久化  回復(fù)  更多評論   

          2008-02-04 12:54 by zlgnet
          配置 JDBCStore ,為何沒有在數(shù)據(jù)庫中發(fā)現(xiàn)所存數(shù)據(jù)

          # re: Session的持久化  回復(fù)  更多評論   

          2009-02-03 00:04 by linburgh
          我也發(fā)現(xiàn)類似問題

          # re: Session的持久化  回復(fù)  更多評論   

          2009-06-17 17:30 by 天天
          <Store className="org.apache.catalina.session.FileStore" directory="mydir" />
          directory 什么意思,mydir 又是什么?

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 石台县| 金塔县| 迁安市| 长葛市| 苍溪县| 云阳县| 花莲县| 合川市| 葫芦岛市| 夏河县| 德保县| 涪陵区| 宁远县| 长春市| 柳河县| 宣城市| 金平| 廊坊市| 浦江县| 松阳县| 宁武县| 新竹市| 晋中市| 枣强县| 尉犁县| 麟游县| 安多县| 沾益县| 瑞安市| 綦江县| 宝清县| 区。| 宁城县| 鸡东县| 屏山县| 滨海县| 宣汉县| 平武县| 遵化市| 英超| 泰来县|