1

我正在尝试在我正在处理的网站上创建启动页面效果(我知道启动页面不好等,但我有我的理由),基本上我想调用运行启动图像覆盖的脚本,只有当访问者从外部网站访问索引。这样,如果访问者从内部页面单击“主页”,则启动画面将不会启动。我一直在寻找,似乎我可以使用 $_SERVER['HTTP_REFERER'] 使用 php 来做到这一点,但我对 php 是全新的,在玩了一下午之后似乎无法让它工作。

以下代码加载脚本,但它似乎并不关心引用 URL 是否包含“mysite”,并且页面顶部出现错误消息:
“遇到 PHP 错误
严重性:通知
消息:未定义索引:HTTP_REFERER
文件名:...”

<?php
$referrer=$_SERVER['HTTP_REFERER'];
if(stristr($referrer, "mysite") == FALSE) {

echo '
<script type="text/javascript">
$(document).ready(function() {

                   $("#wrapper").hide();

        $("#imgContainer").npFullBgImg("/imgs/splash_image.jpg", {fadeInSpeed: 2000, center: true});   
        $("#logoContainer").fullLogoImg("/imgs/splash_logo.png", {fadeInSpeed: 2000, center: true});
        $("#logoContainer").click(function(){

                $("#wrapper").show("fast");
                $("#splash_kill").remove();
                $(this).remove();

        });
});
    </script>';
}
?>

任何帮助将非常感激。谢谢!

4

4 回答 4

3

该通知告诉您未设置 HTTP_REFERER。

'HTTP_REFERER' 将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任。

http://php.net/manual/en/reserved.variables.server.php

快速搜索导致了这一点,它提供了更多细节:http ://www.electrictoolbox.com/php-http-referer-variable/

更新:

您可以尝试使用会话变量。该变量可以是一个简单的布尔值,如果已显示启动页面,则设置为 true,否则设置为 false。这将需要在每个页面上进行一些会话处理,这些页面可能是网站的入口点和/或您想要显示启动画面的每个页面。

http://php.net/manual/en/function.session-start.php

当然,这仅在会议期间可行。

因此,您可以使用 cookie 代替或使用这种方法。

就个人而言,我可能会选择简单的 cookie 方法,因为这只是一个飞溅。无需为这么简单的事情添加会话的开销。

于 2010-07-26T20:50:30.903 回答
1

这就是我正在尝试的。我不确定通配符:

 <?php
 //echo $ref
 $ref = $_SERVER["HTTP_REFERER"];
 //if is NOT coming from inside linking
 if ( $ref != '*www.example*' )
 // send to index and exit
 {header("Location:http://www.example.com/index.php");
 Exit;
 //
 }
 ?>
于 2011-01-18T00:11:23.193 回答
0

虽然您不能完全依赖 $_SERVER['HTTP_REFERER'] 进行设置,但我认为您会发现它对于启动页面来说已经足够可靠了。如果未设置,则没有引用者,并且将是空白的,因为它不在标题中。

您应该首先测试是否为空($_SERVER['HTTP_REFERER']),然后检查它是否包含您自己的域。

另一方面,我在一个旧的 IIS 服务器上工作,它更改了其中一些 $_SERVER 变量的名称,并且通常把它们搞砸了。我会做一个 print_r($_SERVER) 看看发生了什么。

于 2010-07-27T02:34:35.577 回答
0
if(isset($_SERVER['HTTP_REFERER'])&&!empty($_SERVER['HTTP_REFERER'])) {
    $http_referer=$_SERVER['HTTP_REFERER'];
}
于 2012-05-08T06:44:34.607 回答