gpt4 book ai didi

iframe - 是否有任何解决方法可以在 iframe 中为 safari 设置第三方 cookie?

转载 作者:行者123 更新时间:2023-12-02 00:54:21 27 4
gpt4 key购买 nike

我需要从我的应用程序导航到第三方站点 (SSO),这在 chrome、IE9 和 Firefox 中运行良好,但在 safari 中不起作用。有一种解决方法可以在页面上隐藏 iframe 以设置 cookie,然后导航到实际的 iframe,但是这个技巧现在不再有效。我还尝试打开一个新窗口,作为第三方 URL 在浏览器中设置 cookie,然后在 iframe 中打开相同的窗口,但这有一个缺点,即打开的小窗口看起来像一些黑客。是否有任何解决方法可以在 iframe 中为 safari 浏览器设置 cookie?

最佳答案

跟踪 cookie 简介
“跟踪 cookie”是在线广告生态系统中非常重要的一部分。使用场景很多。这是一个称为重定向的示例。
众所周知,许多网上购物者在电子商务网站上看到优惠后并不会立即购买。他们查看一下,离开网站,然后在几小时或几天后返回以进行实际订购。
为了刺激这些用户,网站使用了所谓的重定向技术。基本上,他们想记住没有下订单就离开他们网站的用户,并在其他网站上向他们展示相关广告。通常,电子商务网站会将此类工作委托(delegate)给在线广告平台,例如广告交易平台、DSP 等。
从技术角度来看,它的工作原理如下:

  • 网站所有者有一小段 HTML 代码,称为“跟踪像素”。当跟踪像素是透明的 GIF 图像时,让我们考虑一个简单的情况:<img src="http://pixel.sample-ad-exchange.com/pixel.gif">
  • http://pixel.sample-ad-exchange.com/pixel.gif删除名为 user_id 的域“.sample-ad-exchange.com”的 cookie。在这个cookie中存储了一个生成的唯一用户ID(如果cookie已经存在,服务器就跳过这部分)
  • sample-ad-exchange.com 在内部记住具有此 ID 的用户访问了电子商务网站
  • 当 sample-ad-exchange.com 被请求在其他地方展示广告时(例如通过调用 tag.sample-ad-exchange.com/show_ad.js),它会收到 user_id cookie 以及 HTTP 请求
  • sample-ad-exchange.com 在内部检查此用户之前是否访问过任何电子商务网站。如果他有,它可能会向他展示一个非常相关的广告

  • 问题
    如您所见,删除 cookie 的能力是重定向计划的一个可行部分。此类 cookie 被称为“第三方 cookie”,因为跟踪像素代码位于电子商务网站的域(例如 my-cool-store.com)上,而像素本身位于第三方广告上Exchange 的域 (.sample-ad-exchange.com)。
    默认情况下,不同的浏览器对第三方 cookie 有不同的政策:
  • 8.0 之前的 Chrome、Firefox、IE 始终接受第三方 cookie
  • IE 8.0 及以上 仅当网站明确声明将如何使用 cookie 时才接受第三方 cookie。声明是通过 P3P 协议(protocol)完成的。正如 W3C 的每个规范一样,这个规范也非常神秘。但本质是称为“P3P”的 HTTP header ,您需要将它与包含 cookie 的 http 响应一起发送。这个标题内容工作正常,虽然我不知道它到底声明了什么:'P3P: CP="NOI DSP COR NID CURa ADMa DEVA PSAa PSDa OUR BUS COM INT OTC PUR STA"'
  • Safari 从不接受第三方 cookie

  • 在 iPad 出现并广受欢迎之前,Safari 对行业来说并不是一个大问题。研究表明,iPad 用户比普通 PC 用户更倾向于在线购物。
    技巧 1.0(不再工作)
    事实上,Safari 有时不会拒绝第三方 cookie。它发生在用户做了一些与第三方域相关的操作。 Google Analytics(以及其他平台)利用了这个功能:他们在其中插入了一个 iframe 和模拟表单 sumbit。我不会在这里停留在技术细节上。首先,这次黑客攻击让谷歌损失了 2250 万美元,其次该技巧在 Safari 的最新版本中不再适用
    技巧 2.0 (HTML5 localStorage)
    这个技巧的想法是使用 HTML5 localStorage API。这个 API 与 cookie 非常相似——它允许从 javascript 管理用户的偏好并将其存储在本地用户的盒子上。为什么不将用户 ID 存储在 localStorage 中?我想出的第一个版本的代码:
      <script type="text/javascript">
    if (typeof navigator != "undefined" && typeof navigator.vendor != "undefined" && navigator.vendor.indexOf("Apple") >= 0 && typeof localStorage != "undefined") {
    //Check if browser is made by Apple (means it's Safari) and local storage is available
    var userId = localStorage.getItem("user_id");
    if (userId == null) {
    //set user is if user is unknown
    userId = Math.random();
    localStorage.setItem("user_id", userId);
    }
    var img = document.createElement('img');
    img.src = "http://pixel.sample-ad-exchange.com/pixel.gif?user_id=" + user_id;
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(img);
    }

    这个想法非常简单:在本地存储中查找 user_id 键(如果不存在则创建一个)并将 user_id 作为 GET 参数传递给像素服务器。然后服务器将记录此 ID 而不是触发 cookie。
    但是这段代码不能很好地工作。每个域都有自己的本地存储。如果您的跟踪像素是在 my-cool-store.com 上触发的,则 user_id 将存储在 my-cool-store.com 本地存储中。如果同一用户稍后使用跟踪代码访问 other-domain.com,它将被视为新用户。
    用 iframe 修复那个古老的好技巧是可行的。我们将在 pixel.sample-ad-exchange.com 内的某处插入带有源代码的 iframe 标签,而不是 img 标签。并将用户检测代码放在 iframe 中。由于 iframe 在“内部”执行,pixel.sample-ad-exchange.com 本地存储对于所有跟踪的站点都是相同的。这是一个完整的例子:
    跟踪代码:
    <script type="text/javascript">
    if (typeof navigator != "undefined" && typeof navigator.vendor != "undefined" && `navigator.vendor.indexOf("Apple") >= 0 && typeof localStorage != "undefined") {`
    var iframe = document.createElement('iframe');
    img.src = "http://pixel.sample-ad-exchange.com/iframe.html";
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(img);
    }
    </script>
    iframe 代码 ( http://pixel.sample-ad-exchange.com/iframe.html )
    <html>
    <head></head>
    <body>
    <script type="text/javascript">
    var userId = localStorage.getItem("user_id");
    if (userId == null) {
    //set user is if user is unknown
    userId = Math.random();
    localStorage.setItem("user_id", userId);
    }
    var img = document.createElement('img');
    img.src = "http://pixel.sample-ad-exchange.com/pixel.gif?user_id=" + user_id;
    var body = document.getElementsByTagName('body')[0];
    body.appendChild(img);
    </script>
    </body>
    </html>
    法律问题
    有趣的问题是这种方法是否合法。 Znd 如果下一家使用它的公司将被罚款 2250 万美元。我不是律师,但从我的常识角度来看,Safari 设置明确表示“阻止来自第三方和广告商的第三方 cookie”,而 localStorage 不是“cookie”,上述方法似乎是合法的。

    关于iframe - 是否有任何解决方法可以在 iframe 中为 safari 设置第三方 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852767/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com