tomcat - web.xml 中单个 session 配置元素中的多个跟踪模式元素?

标签 tomcat servlets

我正在为我的 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();

发生以下情况:

  1. 如果允许 tomcat 使用 URL session 跟踪,它会尝试在 URL 请求中查找 sessionId
  2. 如果允许使用 cookie 跟踪 - 它会在 cookie 中查找 session ID。它优先,无论请求中是否有 session ID。
  3. (不是您问题的一部分,但为了完整起见)当且仅当它是唯一允许的跟踪模式时才使用 SSL session 跟踪。否则将被忽略。

我不知道为什么 URL 跟踪没有像 SSL 和 Cookie 跟踪模式那样以单独的方法提取,但它们看起来几乎相同:

  1. 检查模式是否开启
  2. 尝试查找 SessionId
  3. 在请求对象中设置 session ID。

关于tomcat - web.xml 中单个 session 配置元素中的多个跟踪模式元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945183/

相关文章:

java - Jasperreports-6.3.0 Webapp示例编译抛出异常

java - Tomcat 找不到 JSP 页面中编写的文件

tomcat - Spring Boot 环境中的 Bootstrap Weld

eclipse - Eclipse 上未显示 Tomcat

java - 在应用程序启动时缓存查找不起作用

grails - 在 Grails View 中获取标题

java - 自定义 Tomcat 日志记录类需要 ServletContext

eclipse - 每当我们在路径中引用 "/"时,我们能否将 tomcat/servlet/java 配置为选择 windows 根驱动器

servlets - OSGi环境下在Jetty中注册servlet(类加载问题)

java - 转发后是否允许重定向请求?