Internet explorer IE9中未在iframe中发送Cookie

Internet explorer IE9中未在iframe中发送Cookie,internet-explorer,cookies,iframe,Internet Explorer,Cookies,Iframe,首先,在发布这个问题之前,我做了一些研究,所以我了解它。据我所知,这项政策主要(如果不只是)适用于IE6。我的具体问题是IE9。此外,我做的第一件事是制定一项政策(它是有效的,因为它在IE的隐私报告中显示了一个摘要) 我的测试用例如下:我有一个包含iframe的页面。iframe文档在根路径上为当前域设置会话cookie(完整的HTTP头:Set cookie:sid=2b5540e0e4f27075ca4709851700137d;expires=Tue,28-Jun-2011 07:27:4

首先,在发布这个问题之前,我做了一些研究,所以我了解它。据我所知,这项政策主要(如果不只是)适用于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
属性)。请求确实发送cookies,但重定向不发送cookies

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

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

更新: 这绝对是一个隐私区问题:当IE中的隐私栏设置降低到all时,它就起作用了。其他设置都会失败


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

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

密码在哪里

通过更改document.location属性


您是直接为location对象赋值,还是使用location.replace()或location.href=…?

这是测试台的正确复制吗


我在IE9中得到了Cookie,我缺少了什么?

您尝试过添加P3P标题吗?这并不像那篇文章说的那么难

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

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

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

添加如上所述的P3P标题

HttpContext.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
编辑: 更好的是,如果您想将其放入控制器,只需添加以下属性

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() {};
} 

GA cookie可能在加载iframe之前存在,是的。这是因为iframe是已在生产中的网站的子集。重定向是通过为
document.location.href
指定一个新值来完成的。您可能知道,IE9的隐私更为严格。您的策略中可能有一两件事情导致cookie被阻止。是否可以共享您正在使用的策略文件代码?我最近在IE的所有版本中都遇到了问题,直到我发送了正确的P3P头。同样的问题,不会在iFrame@Mrchief我也考虑过这一点,所以我尝试了不同的策略:首先,我认为站点的策略是准确的(使用IBM策略编辑器中的webshop模板),但为了测试,我还尝试了其他站点的策略,在这些站点中,这是可行的。Peter,你有没有想出解决这个问题的办法?实际上现在已经解决了,虽然我不知道是什么解决了。也许是IE的缓存,它可以是非常持久的,或者是我改变了自己,我不能说。几天后它就开始工作了。我很抱歉没有找到真正的原因,但我很高兴它终于起作用了。正如我说的,我首先添加了策略。将该代码添加到iframe代码或创建iframe的父窗口?我的示例是跨域的:iframe是从不同的域加载的。检查更新的问题以获得更准确的测试。