首先,我在发布此问题之前做了一些研究,所以我知道the P3P Policy和the 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)。
答案 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,我错过了什么?