同IP不同端口Session冲突问题

一个服务器上搭建了多个tomcat或者weblogic,端口不一样,同时启动访问时session丢失。如:A,B两个服务,在浏览器中登录访问A后,当前打开的浏览器上在开一个选项卡访问B服务后,回过来点击访问A时session丢失,需要重新登录A才可以访问。经过资料查找,发现问题是因为:IP相同认为是 同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的 session丢失。 如果 IP不同,则不会发生这个问题。IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问A,再访问B的时候,B的sessionid会覆盖A的sessionid。这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成session的丢失。

        解决方法:

方法1:将不同的多个应用服务在不同的虚拟主机中,或者映射不同的IP进行部署。

方法2:对应tomcat服务处理方式:修改coocie的名称保证cookie不重复,即jsessionid的不重称,保证ip相同下sessioncookiename域名不同。

            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修改方法相同

       tomcat增加参数对所有Context生效,影响甚大,所以到以后的版本可以就仅针对Context设置了

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

          3 、weblogic修改方法

          设置各个应用使用不同的cookie-name。

         weblogic的设置(设置不同的cookie-name):

         请在WEB-INF\Weblogic.xml添加如下代码

                         

                             JSESSIONID1   

                 
  

 

http://blog.csdn.net/isshquery/article/details/8493231

http://blog.163.com/wendy_xiaoyue/blog/static/19040105120111114105829574/

 

 本文来源于: http://my.oschina.net/psuyun/blog/520224

 

 

相似问题:

 

0

一台机器,两个web项目,session丢失问题20

  问题描述: 有两个web项目,一个是webwork+spring+hibernate 结构,一个是zk+javabean+hibernate结构。 把两个项目布置在一台机器是时(不同tomcat,不同端口)。用浏览器登录一个项目地址后,再打开另外一个项目, 前面的哪个项目session会丢失 
    通过检查cookie,发现这两个项目的sessionid是同一个,当打开第二个项目的时候,其sessionid被修改了。  
 
 
 

采纳的答案

估计你两个项目的访问域名是一样的。这样的问题在不同的浏览窗口中应该是不存在的 
在同一浏览器窗口中,输入域名相同,但是目录不同的服务时。如果两个服务是互不关联的,应该在访问域名时针对不同服务使用不同的域名。 
或者你的cookie应该是针对域下的某个特定目录的,而不是域的根目录。 

在tomcat中,jessionid应该是默认写在域根目录下的。 

 

 

下面的sso可以关注一下:

应该是单点登录问题,你可以查一下这方面的知识(SSO),它就是解决多web程序共用一个的登录的问题!

本文来源于: http://www.iteye.com/problems/43002



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—



你可能感兴趣的:(ip,端口,session)