2013-01-12 82 views
0

我正在構建基於Google應用程序引擎(GAE)和Google Web Toolkit(GWT)的Web應用程序。GAE,GWT和HTTP Session

客戶端(GWT)與以下列方式的服務器進行交互:

  • 通過RPC(servlet的)的圖像的URL,從該服務器上的一個數據集選擇的詢問;
  • 在瀏覽器中顯示圖像;
  • 在臨時結構中存儲用戶點擊的座標;
  • 當用戶要求另一個圖像時,客戶端發送到用戶點擊的服務器。

一旦服務器收到用戶點擊,它將它們存儲在數據庫中,也保存了用戶標識符。由於我不想使用任何形式的用戶身份驗證,我嘗試使用HTTP會話區分不同的用戶。

的HTTP會話與以下說明一個servlet創建:

public SessionInfo getSessionInfo() { 
    HttpServletRequest request = this.getThreadLocalRequest(); 
    HttpSession session = request.getSession(); 
    if(session.isNew()) session.setMaxInactiveInterval(-1); 

    Integer i = (Integer) session.getAttribute("access_count"); 
    if(i == null) { 
    i = new Integer(1); 
    } else { 
    i = new Integer(i.intValue()+1); 
    } // if 
    session.setAttribute("access_count", i); 
    SessionInfo sInfo = new SessionInfo(session.getId(), i.intValue()); 
    return sInfo; 
} 

從文檔我理解的是,下面的指令:

session.setMaxInactiveInterval(-1); 

將使會話永遠不會過期。但是,每次在瀏覽器上刷新頁面時都會創建新會話。會話已啓用。

我有兩個問題:

  • 爲什麼刷新導致一個新的會話要創建?不應該保留舊的?
  • 對於更好的方式來跟蹤用戶對服務的不同用途,您有什麼建議嗎?

謝謝。

+0

Cookie是否在瀏覽器中啓用? –

+0

是的。 Cookies已啓用。 –

+0

您是否啓用會話? https://developers.google.com/appengine/docs/java/config/appconfig#Enabling_Sessions –

回答

0

我不明白爲什麼每次都會創建一個新會話,您的代碼對我來說看起來很好。您可以嘗試在web.xml中設置超時以查看它是否有任何區別:

<session-config> 
    <session-timeout>-1</session-timeout> 
</session-config> 
+0

重新啓動解決了問題 - 我不知道什麼是行爲不端。 –