Java SessionID:如何获取GET SessionID参数的名称?

时间:2009-11-12 14:18:23

标签: java servlets jsessionid

似乎GET请求中的参数名称,表示SessionID(如Tomcat中的jsessionid = XXXXXXXXXXXXXXXXXXXXXXXXXXX)在servlet规范中未标准化?如何获取SessionID的(Servelt Container Specific)名称? (至少在Websphere中似乎有可能更改SessionID-Parameter-Name的名称)

=>底层问题是,我需要使用会话ID在servlet ALWYAS中编码URL。但似乎“response.encodeURL()”方法仅在禁用Cookie时执行此操作(=>因此使用URL中的sessionID重写URL)。

在servlet中始终使用会话ID编码URL的替代方法是什么?由于第一个问题意味着我想自己构建sessionid但是因此我需要sessionID-Parameter Name,但是它似乎不是标准化的,所以我不知何故需要从某个地方获取Parameter-Name ...)

更新: 目的是保持Servlet-Container提供的SessionManagement功能,而不是完全关闭它。我需要将回调URL传递给我想要始终包含SessionURL的第三方系统。因此,我只想使用sessionID对此 URL进行编码,以最大限度地减少安全问题......

非常感谢你 扬

1 个答案:

答案 0 :(得分:3)

jsessionid实际上不是一个请求参数,它被编码到URL本身,然后在它到达控制器之前由容器解码和删除。可以从HttpSession.getId()检索jsessionid本身的值。

如果您想阻止Tomcat使用cookie,那么您可以在context.xml下提供一个特定于tomcat的WEB-INF文件,其中包含以下内容:

<Context cookies="false" path="/path/to/my/webapp">
</Context>

这将禁用该webapp的所有cookie,然后tomcat应自动将所有会话ID编码到URL上。