关于多个应用在同一个server中部署时出现cookies被覆盖的解决方案_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1946 | 回复: 0   主题: 关于多个应用在同一个server中部署时出现cookies被覆盖的解决方案        下一篇 
shylone
注册用户
等级:下士
经验:199
发帖:90
精华:0
注册:2011-11-24
状态:离线
发送短消息息给shylone 加好友    发送短消息息给shylone 发消息
发表于: IP:您无权察看 2015-5-5 11:48:18 | [全部帖] [楼主帖] 楼主

产生问题的配置

<session-param>
<param-name>CookieName</param-name>
<param-value>TestSessionID</param-value>
</session-param>


我们发现如果两个web应用都使用同样这个参数,互相访问就会有session被覆盖的问题

产生问题的原因

假如有俩个应用app1,app2

同时部署在同一个域domain1中的同一个集群中或则会同一个server中,客户端在访问app1时,这个server会在该客户端保留一个名为 JSessionID的Cookie,记录了app1的信息,JSessionID为Weblogic cookie-name的默认值,当同一个客户端访问app2时,该客户端Cookie中JSessionID的值被app2刷新,此时如果在之前已经打开的IE中继续访问app1会发现Session丢失(JSessionID已经被server刷新!)。俩个cookies的名字相同,造成了访问后一个应用覆盖了前一个应用的cookies,因此,俩个应用部署在同一个server中会出现session被覆盖的问题。

补充一点,如果这俩个应用部署在俩个域中的相同server

中,也会出现上述问题。原因与上面相似。

解决办法

1)相关参数的解释



CookieDomain

Null

Specifies the domain for which the cookie is valid. For example, settingCookieDomain to .mydomain.com returns cookies to any server in the*.mydomain.com domain.

The domain name must have at least two components. Setting a name to*.com or *.net is not valid.

If unset, this parameter defaults to the server that issued the cookie.

For more information, see Cookie.setDomain() in the Servlet specification from Sun Microsystems.

CookieName

JSESSIONID

Defines the session cookie name. Defaults to JSESSIONID if unset. You may set this to a more specific name for your application.


2)解决办法一


修改各自应用的weblogic.xml,使cookies文件的名字不同

例如:

App1中的weblogic.xml文件修改为

<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>myCookie1</param-value>
</session-param>
</session-descriptor>


App2中的weblogic.xml文件修改为

<session-descriptor>
<session-param>
<param-name>CookieName</param-name>
<param-value>myCookie2</param-value>
</session-param>
</session-descriptor>


3)解决办法二


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

4)解决办法三


不要使用CookieName参数,默认的cookies名字即为JSESSIONID,因为俩个应用的JSESSIONID肯定是不同的。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论