目前的需求是要 web application 被重新 deploy 的時候,使用者必須能保留 session
原本在找用 session migration 把 session 遷移出去,deploy 完成後再遷移回來
不過後來找到比較簡單的方式,可以直接即時把 session 寫進資料庫
deploy 完成後 tomcat 會自動把 session 再抓出來。
參考資料:Tomcat 6 Session Persistence through JDBCStore
資料庫:
1 2 3 4 5 6 7 8 9 |
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 設定我這邊必須加上
1 2 |
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK= true org.apache.catalina.STRICT_SERVLET_COMPLIANCE= true |
官方文件是說只加兩個的任一個就可以,不過我只加第一個時沒有效果。
2、
我設定的 context.xml ({tomcat}/conf/context.xml)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<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 設定的官方文件
目前正在測試使用狀況,大體上看來好像是能達到目的。
沒有留言:
張貼留言