iframe里ie8的cookie问题 p3p

本文介绍了解决IE8浏览器阻止第三方站点无隐私声明Cookie的问题。通过在PHP、lighttpd、Apache、IIS等服务器配置P3P头部信息,使站点能够正常接收和使用第三方Cookie。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

a站点iframe嵌入b站点的页面,但是被ie8阻止了cookie,java代码设置heade没用,配置了apache httpd。conf才解决,原文如下:

 

 

P3P,不算是新名词,但还是有些人不清楚。事实上我也不清楚。。。在百度上看到有这玩意就备份下来。说真的,我只是知道用,但不知道为什么用。额。。很明显,因为在ucenter同步的时候,在discuz的ui/api里有写过。

看内容吧。。。。

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

PHP代码
  1. <?php  
  2. header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"' );  
  3. ?>  
这样就能接受第三方的Cookie啦。

 

lighttpd的服务器

XML/HTML代码
  1. server.modules     = ("mod_setenv")  
  2. 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的服务器

XML/HTML代码
  1. < VirtualHost >   
  2. Header set P3P 'CP = "CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR" '  
  3. </ 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页面:

XML/HTML代码
  1. < %  
  2. response.setHeader("P3P","CP = CAO  PSA OUR");  
  3. %>   
java代码最简单的办法,增加一个filte:
Java代码
  1. public   class  TransNameFilter  extends  HttpServlet  implements  Filter {  
  2. private   static  org.apache.commons.logging.Log logWriter =  
  3.    LogFactory.getLog(TransNameFilter.class .getName());  
  4.   
  5. /**  
  6. *  
  7. */   
  8. public  TransNameFilter() {  
  9.    super ();  
  10.   
  11. }  
  12. /* (非 Javadoc)  
  13.    * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)  
  14.    */   
  15. public   void  init(FilterConfig arg0)  throws  ServletException {  
  16.   
  17. }  
  18.   
  19. /* (非 Javadoc)  
  20. * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)  
  21. */   
  22. public   void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  
  23.    throws  IOException, ServletException {  
  24.   
  25.    HttpServletRequest hreq = (HttpServletRequest) request;  
  26.    String transName = hreq.getParameter("transName" );  
  27.    if  (Util.isNullOrEmpty(transName)) {  
  28.     logWriter.fatal(" there is no transName for this request" );  
  29.    } else  {  
  30.   
  31.     logWriter.info(" transName is "  + transName);  
  32.    }  
  33.     
  34.    HttpServletResponse res = (HttpServletResponse) response;  
  35.         //iframe引起的内部cookie丢失   
  36.    res.setHeader("P3P" , "CP=CAO PSA OUR" );  
  37.    if  (chain !=  null )  
  38.     chain.doFilter(request, response);  
  39.   
  40. }  
  41.   
  42. /* (非 Javadoc)  
  43.    * @see javax.servlet.Filter#destroy()  
  44.    */   
  45. public   void  destroy() {  
  46.   
  47. }  
  48.   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值