一.现象
在WebLogic中,有两个不同域A(端口:9000)和B(端口:8000),应用CA在域A中,应用CB在域B中,进行如下操作:
1.先登录应用CA,再登录应用CB,然后,切换回应用CA,发现应用CA的Session丢失;
2.应用CA中有指向应用CB的链接,登录应用CA,点击指向应用CB的链接,应用CA的Session丢失;
二.原因
因Cookie冲突导致Session丢失。
Cookie的覆盖机制:如果一个新的cookie与一个已存在的cookie的NAME、Domain和Path属性值均相同,则旧的cookie会被丢弃。(参考:http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_cookies)
WebLogic的Cookie相关配置:
由于没有在Weblogic.xml配置文件中对cookie的相关属性值进行配置,因此应用CA和应用CB的cookie的Name、Domain和Path属性值均为默认值,即Name为JSESSIONID,Path为“/”,Domain为服务器的IP地址,三个属性值均相同,这就造成了应用CA的cookie与应用CB的cookie会互相覆盖,从而导致相应应用的session丢失。
三.解决办法
在Weblogic.xml配置文件中增加Cookie的相应属性值的配置:
方法1:设置各应用的cookie的Name属性为不同值
方法2:设置各应用的cookie的Path属性为不同值(cookie的Path属性值需与context-root值保持一致,context-root若未在Weblogic.xml中指定则默认为部署的WAR包名或文件夹名,若同一Weblogic服务器不同域中的两应用context-root相同,则此方法不可行)
附注:虽然问题是在WebLogic下的不同域部署应用进行互访的情况下发现的,但是,从问题产生的原因来看,在同一个域中的不同应用的互访,如果未做cookie相关属性值的配置,也会出现cookie冲突的问题。
四.WebLogic修改JSESSION方法(如修改为JSESSIONID1)
<?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"> --> <!-- <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> --> <wls:weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wls="http://www.bea.com/ns/weblogic/weblogic-web-app" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"> <!-- <weblogic-web-app> --> <wls:description>pis</wls:description> <wls:session-descriptor> <wls:timeout-secs>7200</wls:timeout-secs> <wls:cookie-name>JSESSIONID1</wls:cookie-name> <wls:encode-session-id-in-query-params>true</wls:encode-session-id-in-query-params> </wls:session-descriptor> <wls:context-root>pis</wls:context-root> <wls:container-descriptor> <wls:filter-dispatched-requests-enabled>true</wls:filter-dispatched-requests-enabled> <wls:index-directory-enabled>true</wls:index-directory-enabled> <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> </wls:container-descriptor> </wls:weblogic-web-app>
五.解决在iframe中进行跨域访问时session丢失的问题
iframe就是跨域访问,因此iframe中也会产生这种问题,亦可通过此方法解决。
原来session在服务器端生成后分配的sessionID在客户端的保存方式是个cookie,它的生命周期在浏览器关闭后就会结束,而这个cookie的名字如果不特别设置,weblogic会以默认的名称“JSESSIONID”来设置这个cookie的名称,我两个应用的的session cookie名字都没有设置,客户端在第一次通过应用A请求代理转发到应用B时,应用B返回的同名session cookie覆盖了客户端原本的应用A的session cookie,所以导致了应用A session的丢失。
解决方法是,在应用B的weblogic.xml中的session descriptor标记中添加session cookie的名称设置,使其区别于A应用的session cookie名称。其中的cookie-name可以重命名!
文章来源:http://www.cnblogs.com/ibook360/archive/2011/12/15/2288666.html
相关推荐
总结来说,解决Flex在WebLogic上的跨域问题,主要是通过创建和发布跨域策略文件,以及在Flex客户端配置正确的策略文件路径。这使得Flex应用能够跨越浏览器的同源策略限制,与WebLogic服务器进行安全的数据交换。理解...
WebLogic 设置 Session 超时时间 WebLogic 是一个功能强大且流行的 Java 企业级应用服务器,支持多种方式来设置 Session 的超时时间。在本文中,我们将介绍如何在 WebLogic 中设置 Session 超时时间。 Method 1: ...
标题"weblogic部署项目jar冲突解决"指出的核心问题是JAR包冲突。这是因为不同的应用服务器可能内置了不同版本的库,或者在类加载机制上有差异,导致原本在Tomcat上运行良好的应用在WebLogic上出现问题。以下是一些...
7. **监控与调试**:WebLogic提供了丰富的日志和监控功能,帮助开发者和管理员跟踪Session的行为,识别和解决问题。 总之,理解WebLogic中的Session管理是优化和调试Java Web应用程序的关键。通过掌握这些知识,...
weblogic session共享的sql语句_mysql 官方网站提供了DB2、oracle、sqlserver、 如果想要那些数据库,就去官网上看吧, 我这个是mysql的。 都别下错了!
【WebLogic集群Session复制详解】 1. **简介** WebLogic集群是Oracle公司提供的一个高可用性和可扩展性的企业级Java EE应用服务器平台。在集群环境中,session复制是确保用户会话在不同节点之间无缝迁移的关键技术...
解决"weblogic session丢失"的问题需要综合考虑多个因素,通过细致的排查和适当的调整,通常可以找到并解决问题。在实际操作中,理解WebLogic Server的工作原理以及其配置选项是至关重要的。同时,持续的监控和维护...
"将应用部署在Weblogic中与Axis2冲突的问题及解决方案" 问题描述 在将应用部署到Weblogic Server 10.3时,出现了一个错误,抛出ClassCastException异常,具体错误信息为: `java.lang.ClassCastException: ...
### Hibernate的Antlr在Weblogic中产生Jar冲突的解决办法 #### 背景与问题描述 在使用Hibernate框架进行Java应用开发时,特别是在Weblogic服务器环境下部署应用程序时,可能会遇到一个常见问题:由于不同版本的...
Weblogic_10.3集群配置及session共享,
测试weblogic 集群环境(session replication)
9. **监控和诊断**:WebLogic Server提供了丰富的监控工具和日志功能,可以帮助开发者调试和优化Session Bean的性能,及时发现和解决问题。 10. **版本兼容性**:随着Java EE和WebLogic Server的版本更新,Session ...
weblogic10 与hibernate冲突解决方案 错误如下:org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken linux windows 环境解决方案全解 Linux 启动脚本添加如下: export USER_...
WebLogic Server是Oracle公司的一款企业...通过以上步骤,你应该能够解决WebLogic因权限问题导致的启动失败。如果问题仍然存在,建议查看WebLogic Server的日志文件以获取更详细的错误信息,以便进行进一步的故障排除。
3.1. 集群定义 一个集群就是一组协同工作的WebLogic服务器实例。 集群提供:高可用性、负载均衡、扩展性。 集群图示:图2、图3都是集群在应用环境中的示例。
有些情况下,在开发web项目中会遇到weblogic无法解析xml的错误,是因为weblogic在解析xml时是调用自己的方法去解析,会产生一些莫名其妙的错误,我们只要在web-inf下添加weblogic.xml让其让出解析权即可.
使用SUN JDK 启动时要很长时间,但启动启来weblogic正常. 特征见下面标红部分,时间很长. test01@linux-suse:~/bea/weblogic92/samples/domains/wl_server/bin> ./startWebLogic.sh . JAVA Memory arguments: -Xms...
weblogic 不兼容客户端的解决办法 WebLogic 是 Oracle 公司的一款 Java EE 服务器,广泛应用于企业级应用系统中。但是在实际应用中,有些 HTTP 客户端在与 WebLogic 服务器下面的 Web 程序交互时,可能会出现不兼容...