应用的Session冲突

3)Tomcat的设置(设置不同JSESSIONID的path)

修改tomcat/conf/server.xml: 

1.tomcat5修改方法

在启动项中增加org.apache.catalina.SESSION_COOKIE_NAME参数

linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘

win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“

2.tomcat6和tomcat7修改方法相同

在Context容器标签上增加sessionCookieName参数

<Context path=”/” docBase=”webapp” reloadable=”false” sessionCookieName=”yoursessionname”></Context>

还可以加上sessionCookiePath

扫描二维码关注公众号,回复: 386578 查看本文章
<Context ... sessionCookiePath="/" > ... </Context>

延伸阅读:tomcat修改jsessionid在cookie中的名称 http://blog.shilimin.com/338.htm

-------------------------------------

       tomcat服务端和客户端通过sessionCookieName参数(默认值:jsessionid)的值来识别session,并在此session中共享数据。在浏览器首次请求服务的时候,tomcat服务器会在响应头信息JSESSIONID和PATH信息,告诉浏览器在PATH下保存cookie名为JSESSIONID的cookie,当然此时为会话cookie,此cookie是保存在浏览器当前会话中的。

      在下次浏览器请求的时候会将此cookie值返回给服务器,当然cookie的名称同(sessionCookieName参数,确切的来说是同浏览器保存的会话cookie的名称),当服务器接受到此参数的时候,就不会在响应头信息信息里面返回Set-cookie。

      当我们在同一台服务器(统一IP出口也是如此)上部署两个应用时,一般情况JSESSIONID和PATH都是默认值,所以容易导致session冲突。当一个应用登录时,会覆盖另一个应用的JSONSEIONID和PATH,导致session回话结束。解决方法一般有几种:

    

      1、设置不同的ContextPath,通过路径来区分不同PATH下的JSESSIONID

            访问路径比较长,不便于记忆,应用都想通过根目录直接访问时不适用。

      2、在应用中直接设置SESSION_COOKIE_NAME,修改JSESSIONID;

            System.setProperty("org.apache.catalina.SESSION_COOKIE_NAME", "jss");

            这种方式在代码中写死,不够灵活

        

      3、通过设置JAVA_OPTS参数-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname

           linux

           JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘

           win

           set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“

           

      4、在Context容器标签上增加sessionCookieName参数

          <Context path=”/” docBase=”webapp” reloadable=”false” sessionCookieName=”yoursessionname”></Context>

     

      推荐使用3、4的设置方式

       尝试在context.xml中,<Context>根标签设置 sessionCookieName="jss"也可以解决

猜你喜欢

转载自chenzng.iteye.com/blog/2314702