IBM WebSphere跨Profile WSS连接致HttpSession数据丢失求助
应用Session数据丢失异常求助
环境配置
- 服务器:WebSphere 9.0.0.11
- 应用:某Profile下的HTTPS Spring MVC应用,通过HttpSession存储数据并在JSP展示
- WebSocket服务器:部署在另一个WebSphere Profile,客户端通过JS以WSS方式连接
异常现象
每当WSS连接成功后,原有HttpSession中的数据全部清空,仅保留连接成功后存入的数据。
补充信息
- WebSocket与应用同属一个Profile时,无此异常;
- 应用使用HTTP协议时,无此异常;
- 在WildFly服务器上,即使使用HTTPS,Session数据也不会丢失。
默认配置
- 应用地址:
https://myappurl:9444/ - WebSocket服务器地址:
wss://myappurl:9450/websocket
问题分析与解决方案
核心原因
WebSphere 9.0.0.11中跨Profile的WSS连接触发Session丢失,根源在于:
- 不同Profile的HTTPS Session Cookie配置不一致,导致浏览器无法在WSS请求中传递原有Session标识;
- WebSphere默认不支持跨Profile的WebSocket与HTTP Session复用,而WildFly的默认逻辑更宽松;
- HTTPS的Cookie安全策略(
Secure属性)在跨端口请求时,若配置不当会阻止Cookie传递。
解决方案
1. 统一跨Profile的Session Cookie配置
在两个Profile的server.xml中,为HTTPS端点的httpSession配置统一参数,确保Cookie能跨端口传递:
<httpSession cookieName="JSESSIONID" cookieSecure="true" cookieDomain="myappurl" cookiePath="/" cookieHttpOnly="false" <!-- 若JS需访问Cookie可设置,否则保持默认true --> />
2. 配置跨Profile的Session共享
启用WebSphere的分布式Session功能,让两个Profile共享同一Session存储:
- 在两个Profile的
server.xml中添加分布式Session配置:
<httpSession persistenceType="DISTIBUTED" /> <distributedCache id="defaultDistributedCache" />
- 确保两个Profile连接到同一分布式缓存实例(如WebSphere eXtreme Scale)。
3. 验证客户端Cookie传递
确认浏览器在WSS请求中携带原有Session Cookie:
- 检查页面Cookie的
Domain设置为myappurl、Path设置为/; - 确认Cookie的
Secure属性为true(适配HTTPS/WSS); - 若存在跨端口的CORS限制,需在WebSocket服务器配置中允许Cookie传递。
4. 升级WebSphere Fix Pack
WebSphere 9.0.0.11存在WebSocket与HTTPS Session交互的已知Bug,升级到9.0.5.0及以上版本的Fix Pack可修复该兼容性问题。
内容的提问来源于stack exchange,提问作者Francisco Perestrelo
相关产品推荐
相关产品推荐

