通过 PHP head() 在重定向之前调用 URL?

Posted

技术标签:

【中文标题】通过 PHP head() 在重定向之前调用 URL?【英文标题】:Call a URL before a redirect, via PHP head()? 【发布时间】: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 是无状态协议,这里有限制 ;-) 【参考方案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 的内容。

以上是关于通过 PHP head() 在重定向之前调用 URL?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 perror() 在重定向时会改变流的方向?

VueJs - 在重定向到页面之前获取数据

在提交表单后但在重定向和退出之前回显成功消息

如何使用 PHP 在重定向页面上使用 Google Analytics 进行跟踪?

单击后但在重定向之前刷新/重置链接/WPushButton 的 WResource

在重定向之前需要反应上下文来更新