Apache JK集群環境session丟失問題

2021-07-03 13:59:07 字數 841 閱讀 6449

這兩天在搞集群,遇到乙個些問題

專案描述:公司現有乙個系統,頁面的資料的布局都是ajax請求後台,得到html標籤載入的,系統有許可權控制,也就是session中會存放當前使用者是否登入。通過以個過濾器進行監聽,如果使用者在請求後台資料時,發現session中沒有當前使用者的登入資料,就重定向到登入的頁面,所以這裡session中的資料一定要複製共享,否則使用者登入資訊會丟失。

問題描述:通過網上以些例子,做好了集群(在本地做測試),按網上的測試寫個test.jsp,session可以共享,沒有出現問題;將公司的系統加到集群裡,就出問題了,在頁面不斷的重新整理有時候就會丟失了回話,檢視後台日誌,發現,原來session id變了,也就是說session丟失了。

原因:因為網上給的測試例子是為了做測試,在配置是,route是定了值,這個值將會載入session的id後面。balancermember ajp: loadfactor=1route=jvm3 ,問題就出在這裡,頁面的模組是重後台讀取額,也就是說頁面重新整理時會請求後台,而瀏覽器與伺服器的回話事同過cookie中的sessionid來維持的。假設現在頁面的sessionid是:******x.jvm3,重新整理頁面是,請求後台,apache負責負載均衡,有可能分配的請求位址變成了。jvm2的那個tomcat,這是後jvm2中沒有這個sessionid,伺服器就會認為是給新的請求,在建立以個新的session,而那個session就完美的丟失了。因為這個sessionid會返回個頁面,頁面產生了新的sessionid,那麼其他的伺服器都不會存在,那麼其他的伺服器都會產生新的session.

解決方法,去掉apache中配置的route這個屬性和tomcat的server.xml中的route屬性,這樣集群的伺服器上的sessionid都能保持一致性。

用Redis儲存Tomcat集群的Session

前段時間,我花了不少時間來尋求一種方法,把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。那麼問題來了,在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下面,我們用例項來說明此方案。我們的例子使用了一台nginx做...

用Redis儲存Tomcat集群的Session

前段時間,我花了不少時間來尋求一種方法,把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。那麼問題來了,在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下面,我們用例項來說明此方案。我們的例子使用了一台nginx做...

用Redis儲存Tomcat集群的Session

前段時間,我花了不少時間來尋求一種方法,把新開發的 推送到到生產系統中部署,生產系統要能夠零宕機 對使用使用者零影響。那麼問題來了,在取下tomcat節點和載入新tomcat節點時如何做到對使用者無影響呢?方法很簡單,共享session。下 面,我們用例項來說明此方案。我們的例子使用了一台nginx...