我們有以下的情況:忽略特定URI的餅乾在Tomcat中
JSESSIONID是由cookie和URL發送,但因爲的Adobe Flash BUG的,它們是不同的(實際上,該cookie JSESSIONID是錯誤的) 。
我們想要做的是使用URL JSESSIONID而不是cookie中發送的URL。換句話說,當我執行request.getSession()時,它應該返回與URL中的ID關聯的HttpSession,而不是Cookie。
我們研究了Tomcat7的源代碼,事實上,Tomcat首先解析URL,搜索標識符。然後,如果它們存在,則使用Cookie SESSIONID覆蓋它。這裏是CoyoteAdapter.java剪斷代碼(Tomcat的7.0.26):
String sessionID = null;
if (request.getServletContext().getEffectiveSessionTrackingModes()
.contains(SessionTrackingMode.URL)) {
// Get the session ID if there was one
sessionID = request.getPathParameter(
SessionConfig.getSessionUriParamName(
request.getContext()));
if (sessionID != null) {
request.setRequestedSessionId(sessionID);
request.setRequestedSessionURL(true);
}
}
// Look for session ID in cookies and SSL session
parseSessionCookiesId(req, request);
parseSessionSslId(request);
我們可以禁用cookie JSESSIONID所有,但我們可以,因爲我們用它在網站上的所有URL不會。我們希望爲這個特定網址禁用Cookie。
可能嗎?有沒有其他的想法或解決方法來解決這個問題?
這不起作用,因爲當執行過濾器時,會話對象已經建好(這意味着在我們進入過濾器之前使用了cookie jsessionid) – 2012-04-17 14:55:21
您是否測試了它?我非常確定會話實例在第一次getSession()調用之前不會被創建/恢復。 – 2012-04-17 16:44:54
是的。我們測試了它:-) - 我們也嘗試使用閥門,但我們遇到了同樣的問題。確實,在第一次getSession()調用之前沒有創建會話,但sessionId已經與請求關聯(如上面的代碼所示) – 2012-04-17 17:15:41