tomcat6session不失效的問題

原來做了個項目,放到服務器上之後;老是出現session不失效的問題,後來終於找到了,在下面顯示了tomcat6的session管理的問題,把 saveOnRestart="true" 設置爲false解決問題了!

tomcat session持久化

tomcat6 中關閉服務 會自動把session持久化
存儲在work目錄下的 一個session.ser
對於Session的管理,tomcat兩個實現類:org.apache.catalina.session.StandardManager和org.apache.catalina.session.PersistentManager
StandardManager  默認的方法 可以配置的地方比較少
PersistentManager  提供了很靈活的管理方式 配置性強

網上實現配置PersistentManager 這種例子好多好多 大多是兩種形式
形式一:存儲在本地文件中:配置conf目錄裏的context.xml文件

在<Context>節點下添加如下<Manager>節點:
<Manager className="org.apache.catalina.session.PersistentManager" >
    debug=0
    saveOnRestart="true"
    maxActiveSession="-1"
    minIdleSwap="-1"
    maxIdleSwap="-1"
    maxIdleBackup="-1"
    <Store className="org.apache.catalina.session.FileStore" directory="../session" />
</Manager>

形式二:存儲在數據庫中 配置store節點
<Store calssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/session?usename=xxx&password=xxx"
sessionTable="session" sessionIdCol="session_id" sessionDataCol="session_data"
sessionValidCol="sessionValid" sessionMaxInactiveCol="maxInactive"
sessionLastAccessedCol="lastAccess" sessionAppCol="appName" checkInterval="60" debug="99" />

關於節點的說明如下圖:


className:Session的管理類,tomcat將會通過定義的接口來應用該類生成的對象。
debug:Session管理器的跟蹤級別。
saveOnRestart:(true/false)配置服務重啓工程中對session的處理,若爲true,則關閉前把有效的session保存,啓動後重新載入
maxActiveSession:活動狀態Session的最大數,爲-1時則不限制,否則Session Manager將會把超出的Session對象轉移到Session Store中。
minIdleSwap:Session不活動的最短時間,超過該時間,Session Manager 可能會把該Session對象轉移到Session Store中,單位爲秒。
maxidleSwap:Session不活動的最長時間,超過該時間,Session Manager 將會把該Session對象轉移到Session Store中,該Session將不在內存中。
maxidleBackup: Session不活動的最長時間,超過該時間,Session Manager 將會把該Session對象備份到Session Store中,但該Session對象依然存在內存中。
<Store>指定實現持久化的類和Session存放的文件位置,如該例子中指定的類是:org.apache.catalina.session.FileStore,而Session對象存放的目錄則是tomcat根目錄下的 session文件夾(當然自己創建)


記下在複製session中遇到的一個異常:
IOException while loading persisted sessions: java.io.WriteAbortedException
原來要讓session存儲的類沒有序列化 引起io異常 在類後面實現Serializable 接口 (implements   java.io.Serializable  )

爲什麼要序列化呢 序列化:java.io.Serializable
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間.
原因就在這裏 序列化是將對象轉換爲容易傳輸的格式的過程 所以session序列化才能更好的傳輸和存儲
不只是session 要存儲一個對象 保存成文件 都需要序列化。

以前認爲序列化
用處不大 所以儘量不用 結果問題就找過來了  做程序還是得嚴謹啊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章