2010-04-24 114 views
1

我已經啓用我的應用程序會話:會話到期時間?

// appengine-web.xml 
<sessions-enabled>true</sessions-enabled> 

他們似乎當我加載在我的領域不同的網頁的工作。但是,如果關閉瀏覽器,看起來會話被終止。重新啓動瀏覽器會顯示最後一個會話不再可用。

這可能很好,只是想知道這是否記錄在任何地方,所以我可以依靠這個事實?

我嘗試了以下測試,如果我們可以調整它:

// in web.xml 
<session-config> 
    <session-timeout>10</session-timeout> 
</session-config> 

// in my servlet 
getThreadLocalRequest().getSession().setMaxInactiveInterval(60 * 5); 

但相同的行爲,會話數據不再重新啓動瀏覽器後可用。

我查看了我的項目的統計數據,並且看到數據被用於類似「_ah_SESSION」對象的數據。這些會議是從上面進行的嗎?如果是這樣,他們不應該被清理,因爲他們不再有效? (希望GAE自動處理的呢?)

感謝

回答

2

那是怎樣一個會話工作。 JSESSIONID通常在HTTP中保存會話ID。 當瀏覽器關閉會話時,會話在服務器中仍然保持活動狀態,並且一段時間後釋放所有過期的會話。
當您重新打開新的瀏覽器會話時,瀏覽器不知道任何以前的會話,因此創建一個新會話。
有此解決方法...
- 創建一個cookie
- 在一個隱藏的表單字段存儲唯一的變量並使用它。
- URL重寫

+0

你基本上是正確的,儘管在這種情況下,我想瀏覽器已經在使用cookies了 - 只是會話cookie,當瀏覽器關閉時會過期。這一切都按J2EE的預期工作。 – 2010-04-25 10:26:56

4

使用Google帳戶,會話過期實際上是在App Engine管理控制檯中處理的,而不是通過Java。登錄到您的管理控制檯http://appengine.google.com/並選擇「應用程序設置」,然後將「Cookie過期」更改爲最適合您的期限。

+0

最低設置爲1天。它需要和web.xml中session-timout的設置時間一樣長,但是它需要更長的時間嗎? – 2012-06-30 00:49:30

+0

當然,很多原因 - 例如,如果您使用它來跟蹤用戶登錄,並且您不希望他們每天都必須重新登錄。 – 2012-07-02 00:50:48

+1

嗯,但獨立於我設置的期限,1天或1周,cookie本身表示在瀏覽器關閉時過期。 – Mark 2014-06-29 13:49:08

0

默認情況下,Jetty *會設置JSESSIONID cookie(基於會話),這意味着它將在瀏覽器關閉後被刪除。 當瀏覽器再次打開時,將創建一個新的JSESSIONID cookie並丟失以前的會話上下文。

如果您想讓Cookie保持活動狀態的時間更長,那麼只需在網絡上添加以下配置即可。XML:

設置cookie的到期時間

<context-param> 
    <param-name>org.mortbay.jetty.servlet.MaxAge</param-name> 
    <!-- amount of seconds (1 month in this case) --> 
    <param-value>2592000</param-value> 
</context-param> 

另外,你應該讓谷歌知道多久應當保持會議在_ah_SESSION

設置會話到期時間

<session-config> 
    <!-- minutes of inactivity: (1 month in this case) --> 
    <session-timeout>43200</session-timeout> 
</session-config> 

*其他碼頭配置可以在這裏找到:https://wiki.eclipse.org/Jetty/Howto/SessionIds