IE11 停止接受 Cross-Domain Cookie 策略

IE11 Stopped Accepting Cross-Domain Cookie Policies

我刚刚注意到一个奇怪的 cookie 策略问题,它只影响 IE。我只能在 IE11 上测试。也许您知道解决方法?

第 1 步。这需要 2 个域。我们称它们为 cart.com 和 tracking.com.

第 2 步。使用 IE11,浏览到 https://tracking.com/index.php,它应该包含以下内容:

<?php

setcookie('track_test', 'mytest', time()+60*60*24*365, '/', '.tracking.com');
?>
<p>COOKIE SET</p>
<p><a href="https://cart.com/purchase.php">Buy Now</a></p>

第 3 步。点击 https://tracking.com/index.php 中的“立即购买”,它会带您前往 https://cart.com/purchase.php,其中应包含:

// ABOVE THIS LOOKS LIKE AN ORDINARY HTML5 PAGE THAT LOADS jQuery.
<script type="text/javascript">
$(document).ready(function(){

  $('BODY').append('<img alt="" width="1" height="1" src="https://tracking.com/pixel.php" />');

});
</script>

第 4 步。因此,查看 purchase.php 应该触发 https://tracking.com/pixel.php,看起来像这样:

<?php
file_put_contents('output.txt',var_export($_COOKIE,TRUE),FILE_APPEND);
// RETURN FAKE IMAGE RESULT
header('Content-type: image/gif');
header('p3p:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
die(base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw=='));

第 5 步。现在,在 tracking.com 服务器上查看您的 output.txt。你会发现它是空的。这就是问题所在——它无法读取 cookie。 有 cookie 策略限制,即使我发送了正确的 "ignore all that, my friend" cookie header。

现在,使用 Chrome 和 Firefox 重复该过程 -- 没问题。

好的,所以,如果您返回并将像素从 Javascript 切换为纯粹的 HTML 来调用该像素,它也不会那样工作。但是,如果您在浏览器的 URL 中手动调用像素,它在 IE 中工作得很好。我们的跟踪曾经有效,所以我相信这个问题只是在 IE11 上出现过。

但这就是我的难题——我正在使用 third-party,他们通过像素末尾的查询参数将一些额外的东西传递到我的像素脚本,例如订单总数和订单交易 ID脚本 URL,这些只能通过 Javascript 用于我的脚本。这就是为什么我不能使用 HTML 技术加载该像素脚本的原因——但必须在运行时使用 jQuery(或 Javascript)注入它以获得该订单总数和订单交易编号。

答案很简单——这在 IE 中不再有效,从 IE11 开始。人们必须通过他们的购物车以不同的方式传递参数,以便 receipt/thankyou 页面能够 post 正确返回这些参数,而无需在接收像素脚本上读取 cookie。

Microsoft post在他们的网站上编辑了关于此的信息:

https://msdn.microsoft.com/en-us/library/mt146424(v=vs.85).aspx

"Recommended practice is to avoid deploying P3P privacy policies on your site."

因此,如果您在带有 P3P header 的脚本中使用伪造的 GIF 来访问之前在跟踪域上设置的 cookie -- 它现在在 IE11 中已损坏,Microsoft 不关心 post 为什么或提供另一种解决方案。有很多网络广告跟踪平台都依赖于此,而微软刚刚破坏了它们。