2011-03-17 109 views
0

我正在Tomcat上開發一個使用JSP/Servlet的簡單Web應用程序。 我有一個index.jsp頁面,提供用戶界面並加載重複「輪詢」AJAX請求的JS代碼 - 簡單的東西。爲什麼tomcat會爲每個請求創建一個會話cookie?

問題是,每個ajax請求都會返回一個新的jsessionid,所以我試圖存儲在會話對象中的數據每次都會丟失。

這個問題不會發生在我直接調用tomcat的開發機器上,它只發生在請求通過Apache進行的登臺/活環境中(在我的開發機器上,我調用localhost .../path/index.jsp和本地主機... /路徑/ ajax.jsp - 在現場環境中的apache路由domain.com到domain.com/path/index.jsp和domain.com/ajax.jsp到domain.com/path/ajax.jsp)

我證實我沒有useHttpOnly param或useCookies配置的任何地方。我們正在使用tomcat 6 BTW。

難道是apache-tomcat的交互問題嗎?

感謝您的幫助!

回答

2

這可能是Cookie的路徑問題。也許會話cookie被綁定到domain.com/path。但從瀏覽器的角度來看,路徑是domain.com/

將cookie路徑設置爲/會使瀏覽器也發送cookie到domain.com/。

你可以檢查Firebug/Fiddler中的cookies並在此處發佈內容?

1

不幸的是,Servlet API是 在創建會話時相當自由。 各種工具都有默認行爲 ,它們可以在後臺隱式創建會話 。 「 」應用程序很容易創建會話,即使其中一個未明確請求 也是如此。

舉一個例子,如果還沒有 存在,JSP通常會創建一個會話 。這使得JSP可以使用隱含會話變量 。作爲第二個 示例,如果還不存在 ,則request.getSession() 方法也將自動創建 會話。

http://www.javapractices.com/topic/TopicAction.do?Id=191

我認爲這個問題的原因上面

0

解釋在index.jsp的頂部嘗試<%@ page session="false" %>。如果這樣做的話,然後找到另一種方式來存儲值(在請求範圍內)

相關問題