2015-01-21 36 views
1

我正在運行標準版本的Tomcat 7.0.54版本。每次我重新部署我的應用程序時,所有會話都被清除;雖然,有趣的是,重新啓動Tomcat 並不會導致會話被清除爲什麼在Tomcat 7重新部署應用程序時,我的會話會被吹走?

我的應用程序是用Scala編寫的,基於Scalatra framework,雖然我相當確定這與問題無關。

+1

此問題的另一個標準解決方案是將會話存儲在數據庫中,另請參閱[clustering](http://www.mulesoft.com/tcat/tomcat-clustering)。 – 2015-01-21 02:59:02

+0

看看春季會議。它不需要Spring(儘管它與它很好的集成)並將會話存儲外化以消除容器突發事件。 – chrylis 2015-01-27 02:32:07

+0

謝謝。春季會議似乎值得仔細觀察......當我有機會玩時,我會回報。 – 2015-01-29 00:40:19

回答

1

顯然(並且荒謬),Tomcat吹走了重新部署時默認持久會話文件所在目錄的內容。爲了解決這個問題,請在Tomcat平常的操場外指定一個自定義位置。

類似如下的行,Tomcat的context.xml文件中應該做的伎倆:

<Manager pathname="/some/path/persisted-sessions.ser" /> 

(感謝this thread您指出的解決方案,我花了很多時間與問題把玩,所以希望使解決方案的更多發現,能夠通過這裏將它的StackOverflow)


免責聲明:SlipperySeal的評論應該指出的:「一個新的部署會介紹會話和應用程序之間的不兼容問題。「

換句話說,你必須小心一點,如果你對應用程序在會話中存儲的內容進行了什麼/如何/改變,你必須手動刪除持久會話文件部署更新後的應用程序。

1

部署工件的會話信息緊密耦合。

新的部署可能會在會話和應用程序之間引入不兼容。序列化對象可能不兼容,會話中值的「含義」也可能隨着新版本的代碼而改變。

重新啓動服務器而不重新部署應用程序不會導致此問題,因爲會話和部署將保持同步。

如果未清除會話,您的用戶可能會看到意外的錯誤,或者更糟糕的是,應用程序可能表現不正確,允許他們更高的權限或導致其他損害。

正如Chris所提到的那樣,您可以將會話存儲在Tomcats刪除範圍之外,但您可能需要考慮我所說的關於中斷更改的內容。如果您知道模型以這種方式發生了變化,那麼您可能自己刪除會話。如果不是,顯然讓他們成爲。

相關問題