您的位置:首页 > 大数据 > 人工智能

【同一个Server Weblogic两个Domain CookieName冲突导致session失效问题】【关于WebLogic的Session丢失的问题】

2011-09-02 10:13 1056 查看
本文转载自:http://www.blogjava.net/mark1207/archive/2008/04/01/190134.html

http://www.huomo.cn/developer/article-15e50.html

问题描述:

集成项目HT实施过程中碰到这样的问题,本次集成是把两个不同的应用集成到同一个页面框架下,部署方式为:

同一个Server ServerName = Server01,同一个Weblogic,分别建立两个Domain,Domain01(port-7001)和Domain02(port-7002),将应用App1部署在Domain01,将应用App2部署在Domain02,同时启动这两个Domain,如果完全是默认配置,单独访问两个应用是没有问题的,但是在同一个客户端如果访问App1之后再访问APP2会发现App1的Session丢失。

问题分析

客户端在访问App1时,Domain01会在该客户端保留一个名为 JSessionID的Cookie,记录了Domain01的信息,JSessionID为Weblogic cookie-name的默认值,当同一个客户端访问App2时,该客户端Cookie中JSessionID的值被Domain02刷新,此时如果在之前已经打开的IE中继续访问App1会发现Session丢失(JSessionID已经被Domain02刷新!)。

解决方案

第一种方案

在App1和App2的weblogic.xml文件添加如下属性

<session-descriptor>

<session-param>

<param-name>CookieName</param-name>

<param-value>myCookie1</param-value>

</session-param>

</session-descriptor>

将 的值更改为不同于默认值就可以

如果不添加这个,那么客户端的COOKIE中保存的SESSION ID的对象名字是JSESSIONID,来自同一个SERVER上面的应用可能会造成这个SESSION ID的丢失,因为只要是WEBLOGIC产生的SESSION ID都是保存在这个名字的COOKIE中,这段配置就是把应用中的这个名字换成我们私有的,避免和其它域中的应用产生的JSESSIONID冲突。

第二种方案

访问App1时用IP来访问,访问App2时用域名来访问。

特别注意

如果应用程序部署为Cluster的模式,将无法设定,否则部署时发生错误。

posted on 2008-04-01 16:47
Mark 阅读(2039)
评论(5) 编辑 收藏 所属分类:
weblogic

========================================================================

关于WebLogic的Session丢失的问题

解决办法:

<?xml version='1.0' encoding='UTF-8'?>

<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<session-descriptor>

<cookie-name>JSESSIONID1</cookie-name>

</session-descriptor>

<jsp-descriptor></jsp-descriptor>

<container-descriptor></container-descriptor>

<servlet-descriptor>

<servlet-name>action</servlet-name>

</servlet-descriptor>

<context-root>/ehrp</context-root>

</weblogic-web-app>

情况与http://wumin123150.javaeye.com/blog/459385描述的差不多。只是weblogic.xml的配置不能照他那样配置了。我的weblogic版本是11g。

如果在weblogic.xml与web.xml 都设置了session失效时间,以后者为准。

最近在把Tomcat下的程序迁移到Weblogic上的时候遇到了问题,我的程序中有一个过滤器,这个过滤器主要用来检查当前用户访问的资源是否需要认证,如果需要认证并且没有认证的话,则跳转到另外一个认证服务器上去做认证,认证通过后,再跳转回当前服务器继续访问请求的资源。这个过滤器在 Tomcat下运行的很正常,但是迁移到Weblogic上的时候就出现页面乱跳转的现象,因为对程序没有做任何改动,所以怀疑是Tomcat和 Weblogic这两个不同的Web容器在处理方式上有差别,于是就在过滤器中加入了一些输出信息,通过观察发现了用户的sessionid在
Weblogic上跳转前后发生了变化,而在Tomcat上跳转前后则不会有任何变化。页面的跳转是通过 response.sendRedirect("xxx.jsp")来实现的,因此怀疑Weblogic在这个方法的处理上跟Tomcat上不同而导致错误产生(很愚蠢的怀疑,这也导致我在查找问题的方向上出现了错误),一直认为可以通过修改Weblogic的weblogic.xml这个文件来解决,在网上搜了很多,也在看了一天weblogic的资料,都没有解决。后来无意中发现了一个问题,我如果访问的资源都是本地服务器上的,那么去认证之后就不会报错,如果是其他服务器的(其他服务器也使用同一个认证服务器做认证)则会出现上述问题,对cookie做了进一步的跟踪,发现cookie里面的
jsessionid在访问了其他服务器之后就被修改了,也就是原来的jsessionid不见了。同样的事情,在tomcat上就不会出现(到现在我还认为是Tomcat和Weblogic的差别)。在Google上搜索了N遍无果之后,在Baidu上终于结果了,有人遇到过跟我相同的问题,这个问题并不是Tomcat和Weblogic的差别引起的,我在查找问题原因的时候忽略了一个细节,也就是迁移到的Weblogic服务器上,和另外几个服务器 (包括认证服务器)都在同一个IP地址的不同端口下,也就是在同一个域下,而这就是问题的所在。是访问了同一个服务器而导致了jsessionid发生了覆盖(客户端保留一个名为
JSessionID的Cookie),解决方法很简单。

如下:两个web使用不同的sessionid来标识,如第一个web使用jsessionid1,第二个web使用 jsessionid2就可以了。 直接在每个web程序下配置weblogic.xml

<session-descriptor>

<session-param>

<param-name>CookieName</param-name>

<param-value>JSESSIONID1</param-value>

</session-param>

</session-descriptor>

即将第一个web app的session id标识改为jsessionid1,同理将第二个改为jsessionid2,我只是修改了我的服务器上的weblogic,而没有修改其他服务器的,以上问题得到解决了。

同样,这也解释了为什么在最开始的时候我发现jsessionid在Tomcat下不变,而在Weblogic上确改变了的问题。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐