﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Mark's Java Blog-随笔分类-weblogic</title><link>http://www.blogjava.net/mark1207/category/30543.html</link><description>MyEclipse, Java EE, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript,SOA</description><language>zh-cn</language><lastBuildDate>Tue, 01 Apr 2008 09:16:10 GMT</lastBuildDate><pubDate>Tue, 01 Apr 2008 09:16:10 GMT</pubDate><ttl>60</ttl><item><title>同一个Server Weblogic两个Domain CookieName冲突导致session失效问题</title><link>http://www.blogjava.net/mark1207/archive/2008/04/01/190134.html</link><dc:creator>Mark</dc:creator><author>Mark</author><pubDate>Tue, 01 Apr 2008 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/mark1207/archive/2008/04/01/190134.html</guid><wfw:comment>http://www.blogjava.net/mark1207/comments/190134.html</wfw:comment><comments>http://www.blogjava.net/mark1207/archive/2008/04/01/190134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mark1207/comments/commentRss/190134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mark1207/services/trackbacks/190134.html</trackback:ping><description><![CDATA[问题描述 <br />
<br />
集成项目HT实施过程中碰到这样的问题，本次集成是把两个不同的应用集成到同一个页面框架下，部署方式为： <br />
<br />
同一个Server ServerName = Server01，同一个<span class="hilite1">Weblogic</span>，分别建立两个Domain，Domain01(port-7001)和Domain02(port-7002)，将应用App1部署在Domain01，将应用App2部署在Domain02，同时启动这两个Domain，如果完全是默认配置，单独访问两个应用是没有问题的，但是在同一个客户端如果访问App1之后再访问APP2会发现App1的Session丢失。 <br />
<br />
问题分析 <br />
<br />
客户端在访问App1时，Domain01会在该客户端保留一个名为 JSessionID的Cookie，记录了Domain01的信息，JSessionID为<span class="hilite1">Weblogic</span> cookie-name的默认值，当同一个客户端访问App2时，该客户端Cookie中JSessionID的值被Domain02刷新，此时如果在之前已经打开的IE中继续访问App1会发现Session丢失(JSessionID已经被Domain02刷新！)。 <br />
<br />
解决方案 <br />
<br />
第一种方案 <br />
<br />
在App1和App2的<span class="hilite1">weblogic</span>.<span class="hilite2">xml</span>文件添加如下属性 <br />
<br />
&lt;session-descriptor&gt;<br />
&nbsp;&lt;session-param&gt;<br />
&nbsp;&lt;param-name&gt;CookieName&lt;/param-name&gt;<br />
&nbsp;&lt;param-value&gt;myCookie1&lt;/param-value&gt;<br />
&nbsp;&lt;/session-param&gt;<br />
&nbsp;&lt;/session-descriptor&gt;<br />
<br />
将 的值更改为不同于默认值就可以 <br />
<br />
如果不添加这个,那么客户端的COOKIE中保存的SESSION ID的对象名字是JSESSIONID,来自同一个SERVER上面的应用可能会造成这个SESSION ID的丢失,因为只要是<span class="hilite1">WEBLOGIC</span>产生的SESSION ID都是保存在这个名字的COOKIE中,这段配置就是把应用中的这个名字换成我们私有的,避免和其它域中的应用产生的JSESSIONID冲突。 <br />
<br />
第二种方案 <br />
<br />
访问App1时用IP来访问，访问App2时用域名来访问。 <br />
<br />
特别注意 <br />
<br />
如果应用程序部署为Cluster的模式，将无法设定，否则部署时发生错误。
 <img src ="http://www.blogjava.net/mark1207/aggbug/190134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mark1207/" target="_blank">Mark</a> 2008-04-01 16:47 <a href="http://www.blogjava.net/mark1207/archive/2008/04/01/190134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>