【问题标题】:Call a URL before a redirect, via PHP head()?通过 PHP head() 在重定向之前调用 URL?
【发布时间】:2013-04-07 01:00:36
【问题描述】:

我需要有 3 个域:

  • a.com - 我们的脚本(如下)将驻留的位置。
  • b.com - 有一个我们想要触发的跟踪脚本
  • c.com - 是我们的最终目的地,就像一个着陆页

因此,可以将广告广告素材链接到 http://a.com/track.php?id=1004&r=c.com,其中 1004 是我的会员 ID。调用此脚本时,我需要它执行以下操作:

<?php
setcookie('affid', $_GET['id'],time()+60*60*24*365, '/');
head('X-Something: http://b.com/track?id=' . $_GET['id']);
head('Location: http://' . $_GET['r']);

...X-Something 只是 Apache 在进行页面重定向之前理解并尝试连接的一些标头。

问题是——我什至不知道什么 HTTP 标头字段会允许这样做。有可能吗?

最终,会员可以将他的广告创意链接到以下内容:

http://a.com/track.php?id=1004&r=c.com

它会在 a.com 上放置一个 cookie,在 b.com 上触发一个脚本,然后重定向到 c.com。那可能吗?如果是这样,我需要使用什么标题来代替我创建的名为 X-Something 的虚构标题?

【问题讨论】:

  • 如果id在url中,为什么需要cookie?
  • @Dagon 这是因为在 c.com 我们让客户下载一个可执行程序。客户安装并使用该程序后,它会将 a.com 连接回购物车以进行升级。如果不将该 cookie 放到 a.com 上,我就无法知道哪个会员应该获得信用。
  • 你可以动态地将id放在下载的文件名中。
  • @Dagon - 这意味着下载的 EXE 需要将附属 ID 存储在里面,比如动态编译 EXE。这在我们的情况下行不通。
  • 文件名,不在里面,程序可以检查使用的文件名。只是一个想法,如果它不适合你,那么它就不会。 http 是无状态协议,这里有限制 ;-)

标签: php cookies http-headers apache2 http-redirect


【解决方案1】:

我不知道这样的HTTP头存在。

相反,另一种解决方案是让 PHP 请求跟踪脚本。这可以通过file_get_contents() 完成。该方法将返回该 URL 上可用的任何内容,但在这种情况下您不需要它,因此可以忽略它的返回值。

<?php
setcookie('affid', $_GET['id'],time()+60*60*24*365, '/');
file_get_contents('http://b.com/track?id=' . $_GET['id'] );
head('Location: http://' . $_GET['r']);

【讨论】:

  • 真聪明!不幸的是,在我的情况下它不起作用,因为我忘了提到另一个要求——它需要为 b.com 删除一个 cookie。由于 file_get_contents() 无法处理该问题,因为它在服务器而不是客户端浏览器上运行,因此这是行不通的。
  • 我猜这个问题只能通过 META 标签重定向和 IMG 像素来解决。因此,a.com 有一个脚本可以删除 cookie 并显示一个空白页面。该页面将 IMG 像素加载到 b.com,然后执行 META 重定向到 c.com。
  • 这在某些情况下可能有效。但是在 b.com 响应缓慢的情况下,您最终可能会在 b.com 有机会设置 cookie 之前被元重定向到 c.com。您是否允许在框架内显示登录页面?如果是这样,您可以让 a.com 提供带有隐藏框架的 HTML,该框架命中 b.com,同时它在可见框架中显示来自 c.com 的内容。
猜你喜欢
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
相关资源
最近更新 更多