在我的一个基于类的站点上,一切都是通过index.php页面控制的,每个页面都是自己的class,通过索引页面调用。
在其中一个类中,有一个是为站点的每个页面调用的登录头和注销头,这两个类都调用了出现在站点顶部的Ad。
问题是,每当页面上有重定向时,就不会发生重定向,直到调用该页面的类时才会发生,这是在已经调用了标题的之后发生的,这意味着对自页面在重定向中结束以来从未见过的广告进行了广告调用。
这种对广告的性能产生负面影响,因为它降低了广告的点击率。
如果在加载页面的类之前,无法知道页面最终重定向,那么如何确保在页面重定向结束时不进行Ad调用?
我能想到的唯一“开箱即用”的解决方案是以某种方式使用输出缓冲区首先为该页面加载类,然后以某种方式将标题附加到缓冲区的开头,如果它没有重定向到那个位置,但我不知道它是否会工作,或者您将如何做到。
有什么想法吗?
编辑:
为了澄清,重定向已经通过HTTP报头完成,并且所有输出目前都在缓冲。然而,每个页面都可能有自己的重定向原因,所以这就是为什么它被每个页面控制。例如,一个页面负责发送消息,当消息被发送时,它在将消息保存到数据库后将用户重定向回他们的收件箱。在另一个页面上,不允许注销用户,因此特定的页面检查用户是否已登录,如果没有,则将其重定向到登录页面。
但是,即使启用了完全输出缓冲,并且通过单个类页中的header()函数进行重定向,缓冲区仍然在运行报头重定向之前执行Ad调用。
发布于 2012-11-26 13:45:06
重定向必须发生在HTTP头中,而不是使用HTML元标记或Javascript欺骗或类似的。HTTP头需要比其他任何东西都要被输出。正因为如此,而且仅仅因为它有意义,您的应用程序应该在它尝试输出任何HTML之前决定它是否要重定向用户。因此,根本没有问题。
如果当前应用程序逻辑在决定重定向用户之前输出或准备HTML (这会触发ads),那么您的应用程序结构就会很糟糕。改变它。它应该是这样的:
...
if ($userNeedsToBeRedirected) {
header('Location: http://example.com/other/url');
exit;
}
// output HTML and ads here
// never triggered on a redirecthttps://stackoverflow.com/questions/13565677
复制相似问题