7

我前一天读过 apache tomcat 文档,我对emptySessionPath. 据我所知,如果设置为 true,emptySessionPath则存储在 Web 应用程序的根文件夹中。请给出该术语的正确定义, emptySessionPath如果将其设置为 true 和 false 会发生什么?

请指导我。在此先感谢。

4

4 回答 4

8

emptySessionPath字段仅说明所有 cookie 是否应存储在根 URL 路径中/(如果emptySessionPath=true)或不(否则)。

这由 Apache 的连接器使用。在此处查看详细信息(这是 AJP 连接器,它是连接器对象的一部分)。

这基本上意味着:

如果emptySessionPath在 tomcat 中启用,则将JSESSIONIDcookie 写入根“/”路径。这意味着您使用的任何 webapp 都将使用相同的 cookie。每个 webapp 都会重写 cookie 的值来保存 webapp 的 session id,它们都是不同的。

当启用此功能并使用不同 web 应用程序中的 servlet 时,来自同一用户对不同 servlet 的请求最终将覆盖 cookie,因此当 servlet 再次与之交互时,它将创建一个新会话并释放它已经设置的会话.

如果emptySessionPath未设置,则浏览器中有多个cookie,每个webapp一个(根没有),因此不同的webapp不会像上面那样重写彼此的cookie。

JSESSIONID是您的 Webapp 的 ID 会话。在此处查看完整说明。

更新:有关使用情况的信息有些过时 - 请参阅此处以获取有关如何为最近的 tomcat 设置会话路径的更多最新信息。

于 2010-12-02T09:30:04.807 回答
5

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

于 2010-12-02T10:28:13.403 回答
4

正如您可能知道的那样,会话通常由 cookie 维护。cookie 有两个值来确定浏览器是否应该为某个请求返回它们,cookieDomaincookiePathcookiePath必须与请求的匹配。

请求

 /some/request/for/this.html

Cookie 将与 cookie 路径一起返回:

 / 
 /some
 /some/request

但不适用于 cookie 路径:

 /other

按照规范,会话不会在不同的 Web 应用程序之间共享,因此如果您foo.war在 下部署了 Web 应用程序/foo,则会话 cookie 路径默认设置为/foo.

似乎Connector.emptySessionPath是 Connector 上的受保护变量。我还没有阅读代码 - 但我猜它与 Tomcat 的单点登录或共享会话有关,您登录到一个上下文并在所有情况下都经过身份验证 - 在这种情况下,cookie 路径必须/用于会话 cookie。

于 2010-12-02T08:05:02.400 回答
0

以防万一,对于web_app 3.0版本,cookie配置是标准化的,所以等价于webapp 3.0中AJP的emptySessionPath是:

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

于 2012-11-27T12:14:06.703 回答