我们有以下情况:
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。我们想禁用只有这个特定URL的cookie。
有可能吗?有没有其他想法或解决方法来解决这个问题?
答案 0 :(得分:-1)
您可以实现一个自定义servlet filter,它将使用您自己的包装器替换请求,响应和会话对象。然后,包装器可以基于URL表现不同,例如,委托或不委托原始会话实例。虽然您无法在不更改Tomcat代码的情况下访问其他ID的会话数据。