在IE9中没有在iframe中发送Cookie

时间:2011-06-21 08:06:30

标签: internet-explorer cookies iframe

首先,我在发布此问题之前做了一些研究,所以我知道the P3P Policythe MSDN article。据我所知,这项政策主要(如果不是)适用于IE6。我的具体问题是IE9。此外,我做的第一件事是建立一个政策(它的工作原理,因为它在IE的隐私报告中显示了摘要)。

我的测试用例如下:我有一个包含iframe的页面。 iframe文档为根路径上的当前域设置会话cookie(完整的HTTP标头:Set-Cookie:sid=2b5540e0e4f27075ca4709851700137d; expires=Tue, 28-Jun-2011 07:27:41 GMT; path=/),该cookie在一周内到期。没有问题,这已经在生产中运行(独立,而不是在iframe中)一段时间了。

问题在于:iframe文档有一些javascript首先执行一些HTTP请求(由jQuery完成),然后重定向用户(通过更改document.location属性)。请求执行发送Cookie,但重定向不会

我已经在IE中捕获了网络事件,我可以找到的两种请求之间的唯一区别是发起者:XHR由JS库完成,另一种是通过点击完成。但是我真的怀疑点击不会发送cookie。

我想知道为什么我的Cookie没有发送,谷歌分析cookie被发送,所以它应该是可能的。

更新 这绝对是一个隐私区域问题:当将IE中的隐私栏设置降低到全部时,它可以正常工作。其他所有设置都失败了。

我创建了an exact test bed:这是正在使用的实际iframe。要测试它,你必须填写荷兰邮政编码(抱歉;)),使用的占位符很好:1234 AB和1.提交后你得到一个模态,当它完成后你应该被重定向到结果页面。在IE中,重定向显示与您开始时完全相同的页面(因为没有设置cookie)。

4 个答案:

答案 0 :(得分:11)

您是否尝试过添加P3P标头?这并不像那篇文章那么难。

例如在PHP中,只需在php文件的顶部添加此标题:

<?php
    header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');
?>

这个确切的问题,但在不同的背景下工作:Facebook app works on all browsers but not IE8

答案 1 :(得分:4)

如果有人试图为.NET应用程序解决此问题

添加一个P3P标题,如Carlos所提到的

HttpContext.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

编辑: 更好的是,如果你想把它放在Controller中,只需添加以下属性

即可
public class IEP3PHeaderAttribute : FilterAttribute, IResultFilter
{
    public void OnResultExecuting(ResultExecutingContext filterContext)
    {
        // check if the user is using a IE based browser, add a p3p header if true and hasn't already been added
        if (HttpContext.Current.Request.Browser.Browser.ToUpper().Contains("IE"))
        {
            if (System.Web.HttpContext.Current.Response.Headers["p3p"] == null)
            {
                HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");    
            }
        }
    }

    public void OnResultExecuted(ResultExecutedContext filterContext)
    {
    }
}

然后在您的控制器中,例如HomeController的

[IEP3PHeader]
public class HomeController
{
   public ActionResult DoSomething() {};
   public ActionResult DoSomethingElse() {};
} 

答案 2 :(得分:0)

这是关于生成cookie的顺序 - 即在加载iframe之前GA cookie是否存在,但是加载时会设置会话cookie吗?

代码在哪里?

  

通过更改document.location属性

您是直接为位置对象分配值,还是使用location.replace()或location.href = ...?

答案 3 :(得分:0)

这是您的试验台的正确复制品吗? http://www.coderun.com/ide/?w=EyTizeGw9kKgHjwNp3xiPw

我在IE9中收到了cookie,我错过了什么?