女程序员的悲哀啊:同一台服务器,部署两个web项目session丢失,急!!!

AuC 2011-08-03 02:07:37
两个项目部署在同一台服务器上: 比如
服务器ip是:192.168.0.1
a 项目:http://192.168.0.1:9080/a
b 项目:http://192.168.0.1:9081/b
现在b嵌套在a中
如果远程在服务器上访问 http://192.168.0.1:9080/a 没有问题,
但是如果我在自己的本地访问 http://192.168.0.1:9080/a 就有问题,session 丢了.
而把两个系统分别部署到不同的机器,自己的本地也访问正常了

中间件 websphere 麻烦各位了
...全文
714 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪雨潇潇 2014-03-08
  • 打赏
  • 举报
回复
我也遇到了相同的问题,一个项目部署在同意他机器上的IIS上面,是不同端口对外的,两个项目的判断COOKIE的代码是在busiess层的,是用的同一个函数判断的,求解
夏日娃 2013-09-26
  • 打赏
  • 举报
回复
我也是头一次知道有这个问题。
ChDw 2011-08-08
  • 打赏
  • 举报
回复
你用Http跟踪工具,例如Charles之类的看看,是不是出现了Cookie冲突之类
AuC 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 chdw 的回复:]
我觉得应该是你由于同一个ip地址,但是不同的WebSphere服务器。这样造成了Cookie中的JSESSION冲突了

你应该修改WebSphere中控制台,找到两个服务器的会话设置中,在Cookie名称中区分开两个名字就行(例如将JSESSIONID修改为JSESSION_A、JSESSIONID_B)
[/Quote]

将他们的cookie 名改了 区分开来还是没用.还要别的设置吗?
王二北 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 beowulf2005 的回复:]
顶女程序员,求交往。
[/Quote]
哥们,你很直白啊,不过女程序员确实很少,表示敬佩
walkman_22 2011-08-08
  • 打赏
  • 举报
回复
为什么要强调“女程序员的悲哀”~~~
liuyong_kobe 2011-08-08
  • 打赏
  • 举报
回复
那是你的集群服务器设置有问题!
比如在A中登录了用户信息,过一会儿又跳到了B中,而B又木有登录所以就造成了session不存在了!
Eric_Jiang 2011-08-08
  • 打赏
  • 举报
回复
顶你。
Spring89 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zyaccp30 的回复:]
引用 7 楼 liutianxiong888 的回复:
session不会丢,b嵌套在a中,你访问时实际上是存在哪个项目的session中?session是和用户关联的!两个项目中最好不要出现相同的session名称!


也就是说在websphere下session不能共享..
[/Quote]
session是指的一个用户,session是存放在服务器端的!
session和用户是关联的,请问怎么可能共享呢?
原来 2011-08-08
  • 打赏
  • 举报
回复
我觉得你访问a 登陆后,跳到b 你可以重新设置下 session ;这样就没有你说的问题了吧
ChDw 2011-08-08
  • 打赏
  • 举报
回复
例如两个服务器的Cookie分别为JSESSIONID_A,JSESSIONID_B

那么你访问A应用后,应该增加了JSESSIONID_A=...的值,访问B应用后应该同时有两个值

这个时候你访问A应该还是带两个值吧?JSESSIONID_A的值没有发生变化吧?你在应用A中的JSP中打印session.getId()看看是否与JSESSIONID_A匹配(不完全相同的,cookie中会有前缀后缀之类的东西),看看两次访问的session.getId是否相同。
如果相同则不可能丢失session信息
AuC 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 chdw 的回复:]
你用Http跟踪工具,例如Charles之类的看看,是不是出现了Cookie冲突之类
[/Quote]

我用火狐浏览器跟踪了,修改之后要重新启动websphere才有效果,但是就算分开了,还是之前那样子的session问题
AuC 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zyaccp30 的回复:]
引用 16 楼 chdw 的回复:

将他们的cookie 名改了 区分开来……
[/Quote]
也就是说cookie路径、cookie域要设置吗?
vc_player 2011-08-04
  • 打赏
  • 举报
回复
如7L所说,开发时SESSION对象名相同,
导致了后面的SESSION将前面的覆盖,

不过按道理也不该是丢失了,而是被覆盖了才对
Code_AK47 2011-08-04
  • 打赏
  • 举报
回复
围观ing..
傻傻的傻傻傻 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 zyaccp30 的回复:]
两个项目部署在同一台服务器上: 比如
服务器ip是:192.168.0.1
a 项目:http://192.168.0.1:9080/a
b 项目:http://192.168.0.1:9081/b
现在b嵌套在a中
如果远程在服务器上访问 http://192.168.0.1:9080/a 没有问题,
但是如果我在自己的本地访问 http://192.168.0.1:9080/a ……
[/Quote]

貌似跟我们的项目一样,A访问B然后再回来A,我也没看过那些代码,不过好像是通过一个代理去访问了。
sugarTan 2011-08-04
  • 打赏
  • 举报
回复
解决方案:

1. 写客户端Cookie的方式

  当用户登陆胜利当前,把网站域名、用户名、密码、token、session有效工夫局部采用cookie的方式写入到客户真个cookie外面,假如用户从一台Web效劳器逾越到另一台效劳器的时分,我们的程式自动去检测客户真个cookie消息,停止判定,然后提供对应的效劳,当然,假如cookie过时,或有效,天然就不让用户持续效劳了。当然,这种办法的弊端就不问可知了,比方客户端禁用了cookie或cookie被黑客夺取了呢?

  2. 效劳器之间Session数据同步的方式

  假定Web效劳器A是一切用户登陆的效劳器,那么当用户考证登陆一下,session数据就会写到A效劳器里,那么就能本人写脚本或保护进程来自动把session数据同步到其他Web效劳器,那么当用户跳转到其他效劳器的时分,那么session数据是分歧的,天然就可以间接停止效劳不必再次登陆了。缺陷是,能够会速度慢,不波动,假如是单向同步的话,登陆效劳器呈现题目,那么其他效劳器也无法效劳,当然也能思索双向同步的题目。

  3. 应用NFS共享Session数据的方式

  实在这个计划和上面的Mysql计划相似,只是存储方式不相反。大致就是有一台公共的NFS效劳器(Network File Server)做共享效劳器,一切的Web效劳器登陆的时分把session数据写到这台效劳器上,那么一切的session数据实在都是保管在这台NFS效劳器上的,不管用户拜访那太Web效劳器,都要来这台效劳器获取session数据,那么就可以完成共享session数据了。缺陷是依靠性太强,假如NFS效劳器down掉了,那么自己都无法任务了,当然,能思索多台NFS效劳器同步的方式。


  4. 应用Mysql数据库共享Session数据的方式

  这个方式和NFS的方式相似,也是采用一台Mysql效劳器做共享效劳器,把一切的session的数据保管到Mysql效劳器上,一切Web效劳器都来这台Mysql效劳器来获取Session数据。缺陷也是依靠性太强,Mysql无法任务了影响一切的Web效劳器,当然,能思索多太Mysql数据库来共享session,运用同步Mysql数据的方式。

  5. 运用硬件装备

  这个算是比拟幼稚的处理计划了,运用相似BIG-IP的负载装备来完成资源共享,那么就可以又波动又公道的的共享Session了。目前十分多门户网站采用这种方式。缺陷十分分明了,就是要免费了,硬件装备一定需求购置本钱的,不过关于专业或大型使用来讲,是比拟公道并且值得的。

参考:
http://blog.sina.com.cn/s/blog_4f9fc6e10100r2aj.html
sugarTan 2011-08-04
  • 打赏
  • 举报
回复
问题出在哪?要搞清楚Session在保存在哪的:
参考:http://topic.csdn.net/u/20070827/17/9c351ac2-359f-4448-8649-b99bb32395e7.html
session是保存在服务器的内存中的,那么两台服务器的内存可以共享吗?两台服务器内存共享不了,那么session可以共享吗?
所以说两台服务器的session是不能共享的!
楼主还是另想其它方案解决问题吧!


ChDw 2011-08-04
  • 打赏
  • 举报
回复
我觉得应该是你由于同一个ip地址,但是不同的WebSphere服务器。这样造成了Cookie中的JSESSION冲突了

你应该修改WebSphere中控制台,找到两个服务器的会话设置中,在Cookie名称中区分开两个名字就行(例如将JSESSIONID修改为JSESSION_A、JSESSIONID_B)
deqiang135 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 twlhh 的回复:]

应该是a,b的session混了
[/Quote]

如果是a,b的session混了,那楼主就不会出现这样的问题了,现在她是想混,但是混不了。。
她要实现单点登录的效果,用opensso服务器
加载更多回复(13)

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧