我正在为我的 Web 应用程序使用 Tomcat 8.0.35。这篇文章
https://www.logicbig.com/tutorials/java-ee-tutorial/java-servlet/session-tracking-mode.html
表示我们可以在 web.xml 中的单个 session 配置元素中使用多个跟踪模式元素
<web-app>
<session-config>
<tracking-mode>???</tracking-mode>
</session-config>
</web-app>
我找不到关于“多个跟踪模式元素”的附加信息。如果我有以下情况,Tomcat 的行为可能是什么?
<web-app>
<session-config>
<tracking-mode>URL</tracking-mode>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
</web-app>
最佳答案
问题的答案可以在 org.apache.catalina.connector.CoyoteAdapter#postParseRequest
以下代码来自tomcat 8.5:
String sessionID;
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(request);
parseSessionSslId(request);
sessionID = request.getRequestedSessionId();
发生以下情况:
- 如果允许 tomcat 使用 URL session 跟踪,它会尝试在 URL 请求中查找 sessionId
- 如果允许使用 cookie 跟踪 - 它会在 cookie 中查找 session ID。它优先,无论请求中是否有 session ID。
- (不是您问题的一部分,但为了完整起见)当且仅当它是唯一允许的跟踪模式时才使用 SSL session 跟踪。否则将被忽略。
我不知道为什么 URL 跟踪没有像 SSL 和 Cookie 跟踪模式那样以单独的方法提取,但它们看起来几乎相同:
- 检查模式是否开启
- 尝试查找 SessionId
- 在请求对象中设置 session ID。
关于tomcat - web.xml 中单个 session 配置元素中的多个跟踪模式元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945183/