是否所有servlet容器都使用jsessionid来跟踪会话?

时间:2014-01-03 15:42:37

标签: java url servlets httpsession jsessionid

我正在编写一个需要模仿HttpServletResponse.encodeURL(...)HttpServletResponse.encodeRedirectURL(...)的实用程序。

我知道许多servlet容器会将;jsessionid=XXX附加到URL以跟踪会话。我的问题是做所有 servlet容器吗?

请注意,我知道如果首选cookie,可以关闭此功能。

所以,我的问题:

  1. 每个servlet容器都会将;jsessionid=XXX附加到URL吗? (当使用基于网址的会话ID时)
  2. 是否有其他变体(例如jsessionid vs JSESSIONID)
  3. 还有其他奇怪的方法来跟踪网址中的会话ID吗?
  4. 我对所有主要的servlet容器感兴趣(jetty,tomcat,jbos,websphere等等)

1 个答案:

答案 0 :(得分:3)

是的,你绝对可以在Weblogic,Websphere,Jetty& Tomcat之前的7(因为我已经完成了)。但是,直到版本2.5的Java Servlet API声明会话标识cookie必须命名为JSESSIONID

<强> weblogic.xml中

<session-descriptor>
   <cookie-name>myCustomSessionId</cookie-name>
</session-descriptor>

<强>码头

Eclipse Jetty的会话管理允许通过WEB-INF/web.xml上下文参数或通过特定上下文的init参数,甚至在服务器端会话管理器上设置会话cookie名称和路径参数名称(以应用此设置为服务器上所有已部署的Web应用程序)。

Session Management documentation

中概述
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">
  ...
  <context-param>
    <param-name>org.eclipse.jetty.servlet.SessionCookie</param-name>
    <param-value>XSESSIONID</param-value>
  </context-param>
  <context-param>
    <param-name>org.eclipse.jetty.servlet.SessionIdPathParameterName</param-name>
    <param-value>xsessionid</param-value>
  </context-param>
  ...
</web-app>

Jetty还支持Servlet 3.0会话配置名称配置

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   metadata-complete="true"
   version="3.0">

   <session-config>
      <comment>This is my special cookie configuration</comment>
      <domain>foo.com</domain>
      <http-only>false</http-only>
      <max-age>30000</max-age>
      <path>/my/special/path</path>
      <secure>true</secure>
      <name>FOO_SESSION</name>
   </session-config>
</web-app>

Tomcat - context.xml

<Context path="/myApp" sessionCookieName="myCustomSessionId">

<强> Latest tomcat

  

Tomcat不再接受非规范兼容的仅限名称的Cookie   默认情况下。但是,添加了一个新的系统属性,   org.apache.tomcat.util.http.ServerCookie.ALLOW_NAME_ONLY,可以是   用于接受仅限名称的cookie。

IBM Websphere 6.1

  
Servers > Application servers > server_name > Web container settings > Session management > Enable cookies
  
     

Cookie名称 - 您的新名称