什么是Tomcat中的空会话路径?

7
我在一天前阅读了 Apache Tomcat 文档,但是对于 emptySessionPath 感到很困惑。据我所知,如果将其设置为 true,则 emptySessionPath 存储在 Web 应用程序的根文件夹中。请给出 emptySessionPath 的正确定义以及如果将其设置为 true 和 false 会发生什么?请指导我。谢谢。
4个回答

8
emptySessionPath字段表示是否将所有cookie存储在根URL路径/中(如果emptySessionPath=true),否则不会。这由Apache的连接器使用。有关详细信息,请参见此处(这是AJP连接器的说明,它是连接器对象的一部分)。
基本上意思是:
如果在tomcat中启用了emptySessionPath,则JSESSIONID cookie将写入根“ /”路径。这意味着您所在的任何Web应用程序都将使用相同的cookie。每个Web应用程序将重新编写cookie的值以保存该Web应用程序的会话ID,并且它们都是不同的。
当启用此选项并使用不同Web应用程序中的servlet时,来自同一用户的请求将覆盖cookie,因此当再次与servlet交互时,它将创建一个新会话并且失去已经设置的会话。
如果未设置emptySessionPath,则浏览器中有多个cookie,每个Web应用程序一个(没有在根目录下),因此不同的Web应用程序不会像上面那样重写彼此的cookie。 JSESSIONID是您的Web应用程序的ID会话。有关完整说明,请参见此处
更新:关于用法的信息有点过时-请参见此处,了解如何为最近的Tomcat设置会话路径的更多最新信息。

嗨,Elite,请进一步解释一下如果未设置emptysessionpath会发生什么? - Muneeswaran Balasubramanian
@Muneeswaran Balasubramanian,如果您阅读了我的第一个链接,如果未设置,则默认值为false。此外,请阅读被阻止部分的最后一段,它解释了如果未设置emptySessionPath的情况。 - Buhake Sindi
抱歉,我无法理解你在封锁部分的最后一段,所以我想请你进一步解释一下。 - Muneeswaran Balasubramanian
在我的应用程序中,当会话过期后,我发送了请求。如果该请求是HTTP请求,则可以正常工作。但是,如果该请求是Ajax请求,则URL会更改但页面不会加载。但在我将emptysessionpath设置为true之后,一切都正常了。那么,在这之间发生了什么呢?如果您可以,请解释一下。 - Muneeswaran Balasubramanian
Ajax 不会重新加载页面,因为您正在对服务器进行异步调用,这就是为什么它从未重新加载页面的原因。当 emptySessionPath 被设置时,我无法真正解释为什么一切都能正常工作。 - Buhake Sindi

5

如果将emptySessionPath设置为true,则会从JSESSIONID cookie中消除上下文路径。它将设置一个cookie路径为/。此属性可用于跨应用程序身份验证机制。


4

如您所知,会话通常由cookie维护。一个cookie有两个值,决定它们是否应该被浏览器返回给某个请求:cookieDomaincookiePathcookiePath 必须与请求的路径匹配。

发出请求。

 /some/request/for/this.html

Cookie将返回带有cookie路径:

 / 
 /some
 /some/request

但不适用于cookie路径:

 /other

根据规范,会话在不同的Web应用程序之间不共享,因此,如果您在/foo下部署了Web应用程序foo.war,则会话cookie路径默认设置为/foo
似乎Connector.emptySessionPath是连接器上的受保护变量。我没有阅读过代码,但我猜它与Tomcat的单点登录或共享会话有关,在这种情况下,会话cookie的路径必须为/

0

以防万一,对于web_app版本3.0,cookie配置已经标准化,因此在webapp 3.0中等同于AJP的emptySessionPath的内容是:

<session-config>
<cookie-config>
<path>/</path>
<secure>true</secure>
</cookie-config>
</session-config>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接