iframe(frameset)跨域session丢失问题终极解决方案

常常会遇到,iframe跨域时,另一个系统读不到第一个系统的session。或者有时能读到,有时session却莫名奇妙的丢失问题。下面,我们就这一问题做简要的分析并提出可行的解决方案

        假定系统一中一个iframe,包含了系统二的东西。而系统一用户在此iframe加载后还会不定时的再请求系统二,而这第二次请求,往往会发生读不到第一次的请求的session问题。

        经过分析两个系统的sessionId情况后发现,其实所谓的session丢失问题并不是真的存在,第二个系统在读到iframe的src请求后,会把这个session存下来,这时不管什么情况,session是正确的。而当用户继续在第一个系统页面上操作,下一次访问系统2时,就会出现所谓的session丢失问题,即读不到前面第一次请求时系统2保存的session值。

     我测试的系统1是jsp+tomcat。系统2是asp+iis.

     通过比较asp对两次请求响应的sessionId发现。第二次请求时,sessionId比第一次iframe请求时的sessionId大1,也就是说,第二次请求时,系统2读了新的session值,而不是第一次请求时的session值。

    现在,问题已经很明了,就是说,asp服务端把第二次请求当成了一次新的请求。所以,解决这个问题的突破口就在与,我们需要告诉系统二,不要把iframe请求后的后续请求当做新的请求。而是用iframe第一次请求的session。

解决方案:

   如果你的系统二是IIS上的(Asp)系统。在IIS上做如下设置:

    1.打开IIS

     2.选择被嵌入iframe源站点或者目录,右键点击打开属性框
    3.切换到HTTP头-->添加
    5.自定义HTTP头名: P3P
    6.自定义HTTP头值: CP="CAO PSA OUR"
    7.关闭属性框退出,即刻生效

 上面的设置含义是告诉IIS,不要画蛇添足把我的第二次请求当做新请求了,你就用老的session好了。

  如果你的第二个系统是jsp的。那么

   1.可以在你包含的jsp页面头部加上 response.addHeader("P3P ", "CP=\"CAO PSA OUR\""),这个方法比较笨,页面多的话要一个一个加,肯定不好

   2.在你的web服务器的配置文件上找到httpheader的配置,也加上P3P-->CP="CAO PSA OUR"  这对值 即可。如tomcat的 service.xml文件

至此,问题解决!

说明:iis上的设置本人测试过,没有问题。而jsp系统,我虽没测试,但是可以以此类推,在web服务器上配置。可以搜索"Tomcat Httpheader 配置方法"找到配置步骤,配上P3P-->CP="CAO PSA OUR"  这对值即可

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值