• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    iframe跨域与session失效问题的解决办法

    何为跨域跨域session/cookie?

    也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上。第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网 站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie。

    我的问题

    在开发讯息在线产品(http://iap.pgia.net)测试各种浏览器的兼容性时,发现IE浏览器(v7\8)都无法登录(总是提示验证码不匹配错误),而其它浏览器无此问题(firefox、百度等)。因此可以断定这和浏览器脱不了干系。

    初步分析:

    细查发现,在使用IE浏览器(v7\8)访问时,服务器端日志中显示sessionId一直在变化,每次请求都会产生一个全新的sessionId.

    显然这是导致无法登录的直接唯一原因,如果解决这个问题则可正常登录。

    深入分析:

    为什么在IE浏览器(v7\8)上会出现这种情况呢,百度了解后得知:

    出于隐私安全的考虑,IE会丢失Iframe中的Cookie,IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox、Chrome 不存在此问题。

    我们知道Session 其实就是基于Cookie的。客户端在第一次与服务器建立会话时,会分配给客户端一个随机的sessionId,并存于客户端cookie中,然后在之后的请求中,会带上这个Cookie,如果在客户端找不到这样的Cookie,那么服务器就会重新分配一个。

    而我的应用结构恰恰如此,即内置一个iframe嵌入远程应用来实现的。

    解决办法:

    要解决这个问题就是要在请求时添加“P3P”协议。那么如何实现呢?

    在框架页面加入如下代码:

    复制代码 代码如下:

    %   
    // 解决IE7\8跨域访问问题  
    response.setHeader("P3P","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");  
    %>

    至此,问题已解决

    您可能感兴趣的文章:
    • 异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)
    • 浏览器关闭使session失效的问题多种解决方式
    • Laravel 5框架学习之Eloquent (laravel 的ORM)
    • Laravel 5框架学习之表单
    • Laravel 5框架学习之日期,Mutator 和 Scope
    • Laravel 5框架学习之表单验证
    • Laravel 5 框架入门(一)
    • 关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
    • Session对象失效的客户端解决方法
    上一篇:log4net教程日志分类和自动维护示例
    下一篇:asp.net后台注册js的四种方法分享
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    iframe跨域与session失效问题的解决办法 iframe,跨域,与,session,失效,