1 产生问题的配置
<session-param>
<param-name>CookieName</param-name>
<param-value>TestSessionID</param-value>
</session-param>
我们发现如果两个web应用都使用同样这个参数,互相访问就会有session被覆盖的问题
2 产生问题的原因
假如有俩个应用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中,也会出现上述问题。原因与上面相似。
3 解决办法
(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肯定是不同的。
--转自