`
ralphr
  • 浏览: 143211 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

IE中iframe跨域丢失Session问题 p3p

    博客分类:
  • web
阅读更多

  整合客户的登录时,或者其他一个网站通过iframe时,特别是一个http页面,访问一个https页面时,常常会session失效!

1、由于IE的安全限制,将父面所在域加入信任站点就OK了!

 

 

2、当“父”页面是https的,通过iframe去访问https页面时,

<iframe name="loginFrame" id="loginFrame" frameborder=NO scrolling=NO src="" class="iframeBody" ></iframe>

会报“有不安全的信息”

办法是: src="/" 就OK!

3、当客户设置了1时,还是不行时,怎么办呢?又查询了一些网上的资料!

IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存在此问题了。

在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie,也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏览器的。

在用户浏览a.php时 A.com写入的为第一方Cookie,其嵌入的iframe指向b.php.这时B.com写入的就为第三方Cookie了,所以它是被IE当在了大门外。 所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器.

 

解决方案.

PHP程序

可以直接在B网站中写入www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
<?phpwww.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"')www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
?>www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
这样就能接受第三方的Cookie啦。

lighttpd的服务器

server.modules    = ("mod_setenv")

setenv.add-response-header = ( "P3P" => "CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'")

apache的服务器

<VirtualHost>

Header set P3P 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'

</VirtualHost>

IIS的服务器www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
增加一个网站http头来解决问题;www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
然后输入头名:P3Pwww.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
输入头内容:CP=CAO PSA OUR

jsp页面:

<%

response.setHeader("P3P","CP=CAO PSA OUR");

%>

java代码最简单的办法,增加一个filte:

public class TransNameFilter extends HttpServlet implements Filter {
private static org.apache.commons.logging.Log logWriter =
   LogFactory.getLog(TransNameFilter.class.getName());

/**
*
*/
public TransNameFilter() {
   super();

}
/* (非 Javadoc)
   * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
   */
public void init(FilterConfig arg0) throws ServletException {

}

/* (非 Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
   throws IOException, ServletException {

   HttpServletRequest hreq = (HttpServletRequest) request;
   String transName = hreq.getParameter("transName");
   if (Util.isNullOrEmpty(transName)) {
    logWriter.fatal(" there is no transName for this request");
   } else {

    logWriter.info(" transName is " + transName);
   }
  
   HttpServletResponse res = (HttpServletResponse) response;
        //iframe引起的内部cookie丢失
   res.setHeader("P3P","CP=CAO PSA OUR");
   if (chain != null)
    chain.doFilter(request, response);

}

/* (非 Javadoc)
   * @see javax.servlet.Filter#destroy()
   */
public void destroy() {

}

}

  

分享到:
评论
2 楼 javavsnet 2012-07-09  
jsp页面:
<%
response.setHeader("P3P","CP=CAO PSA OUR");
%>

管用!
1 楼 smalt_sky 2010-01-14  
<?
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"')
?>恩。还不错。这样可以解决问题

相关推荐

    iframe 跨域访问session

    然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...

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

    通过这种方式,可以解决在IE浏览器中由于P3P隐私设置导致的iframe跨域cookie丢失问题,进而解决session失效导致的用户频繁重新登录的问题。这个方法在技术上是可行的,但需要网站管理员操作,确保P3P声明符合实际的...

    【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx

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

    PHP关于IE下的iframe跨域导致session丢失问题解决方法

    总的来说,针对IE浏览器中iframe跨域导致Session丢失的问题,关键在于理解浏览器对跨域Cookie的处理方式,特别是IE的独特限制。通过设置P3P头,可以通知浏览器允许iframe内的页面使用和共享Session,从而修复登录和...

    关于Iframe如何跨域访问Cookie和Session的解决方法

    总结来说,解决Iframe跨域访问Cookie和Session的关键在于理解和利用浏览器的特性,如P3P协议,以及巧妙地调整代码结构。同时,对于Session的管理,要意识到它与Cookie之间的关联性。在多系统集成的场景下,这些技巧...

    iframe跨域嵌套自适应高度

    ### iframe跨域嵌套自适应高度 在网页开发过程中,`iframe`作为一种常见的网页元素,被广泛用于在当前页面中嵌入另一个独立的文档或页面。然而,在实际应用中经常会遇到一些问题,如跨域限制、自适应高度调整以及...

    跨域页面访问问题解决.doc

    解决跨域页面访问问题的办法是,在子系统的登录代码中加入 P3P 的认证,即允许第三方读取 cookie,这样 cookie 值才能被浏览器正确的读取并保存。P3P(Platform for Privacy Preferences)是一种隐私保护协议,允许...

    php session_start()出错原因分析及解决方法

    - **PHP在IE下的iframe跨域session丢失问题**:由于浏览器同源策略,跨域会导致会话丢失,可以通过设置 P3P 头部或使用共享域名的 cookie 来解决。 - **Failed to write session data** 错误:这通常是因为临时...

    C#单点登陆组件源码SSO

    源码可能包含了处理不同域之间的票据传递的技术,例如使用隐藏的IFrame或者设置P3P头来实现跨域Cookie。 5. **会话管理**:在SSO环境中,会话管理需要特别注意,确保用户的会话状态在整个系统中得到同步。这可能...

Global site tag (gtag.js) - Google Analytics