目前的需求是要 web application 被重新 deploy 的時候,使用者必須能保留 session
原本在找用 session migration 把 session 遷移出去,deploy 完成後再遷移回來
不過後來找到比較簡單的方式,可以直接即時把 session 寫進資料庫
deploy 完成後 tomcat 會自動把 session 再抓出來。
參考資料:Tomcat 6 Session Persistence through JDBCStore
資料庫:
create table sessions ( session_id varchar(100) not null primary key, valid_session char(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) );
大體上我的設定方法就跟上面差不多,不過有一點點小小的差異:
1、
{tomcat}/conf/catalina.properties 設定我這邊必須加上
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK=true org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
官方文件是說只加兩個的任一個就可以,不過我只加第一個時沒有效果。
2、
我設定的 context.xml ({tomcat}/conf/context.xml)
<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="true" minIdelSwap="-1" maxIdleSwap="-1" maxIdleBackup="3600"> <Store className="org.apache.catalina.session.JDBCStore" driverName="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/table?user=user&password=password" sessionTable="sessions" sessionIdCol="session_id" sessionDataCol="session_data" sessionValidCol="valid_session" sessionMaxInactiveCol="max_inactive" sessionLastAccessedCol="last_access" sessionAppCol="app_name" checkInterval="60" /> </Manager>
那個網址上用的設定好像會讓 session 超神速就自動 time-out
使用者一下子不動就被登出了~。
另外連接 MySQL 的字串說明如下:
jdbc:mysql://127.0.0.1:3306/table?user=user&password=password
table = 資料庫名稱
user = 登入帳號
password = 登入密碼
& = 表示 "&",這是故意要用 entity 的表示方式來表達,查到一些資料是說如果在 Java 裡使用的話直接用 & 即可,但寫在 XML 裡面必須轉換成 entity
相關資源:
1、HTML 4.0 Special Entities
2、context.xml 設定的官方文件
目前正在測試使用狀況,大體上看來好像是能達到目的。
沒有留言:
張貼留言