iframe内嵌多个应用sessionId 相互覆盖问题

        当前门户系统使用iframe内嵌了多个应用,多个应用间使用单点登陆实现一次登陆,并且有一个退出的按钮用来退出门户系统,注销单点登陆。

        存在问题:门户登陆成功后,点击退出是可以正常退出的,但是切换到应用A,再点退出,发现退出不了。

        分析问题的根源:

        1:门户登陆成功后,从单点登陆服务中获取到ticket,校验成功后,设置sessionId _const_cas_assertion_

 下一次访问时,会根据是否存在key为_const_cas_assertion_的session,判断是否登陆过。

        2:切换到应用A时,因为单点登陆,应用A无需再次登陆,即可从单点登陆服务器中直接回跳到应用,然后设置sessionId  _const_cas_assertion_

        3:点击门户的退出按钮,发现应用并没有重定向到单点登陆的退出地址,反而是到登陆地址去做登陆,导致页面进行了一次登陆刷新。

 查看后端代码发现,获取到的sessionId为空,导致门户认为当前的访问请求没有进行登陆验证,从而将请求重定向到登陆地址去。

 是什么导致门户的sessionId失效呢 ,我们发现是由于点击应用A后导致的,怀疑是sessionId被覆盖引起的。

session是通过在客户端生成一个cookie,所有请求会带上这个cookie。一个cookie的NAME、Domain和Path属性值均相同,则会覆盖,若未设置Domain域,则域为ip(不包括端口)。

查看对应的JSESSIONID发现 ,门户和应用A都没有设置上下文(默认path/),导致门户的sessionid被应用A覆盖。

解决办法:为门户设置一个上下文。成功解决sessionid 被覆盖的问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值