将页面重定向到根路径

时间:2009-05-14 07:08:17

标签: php

我在这里有这个类,我想要做的是,如果检查某些东西等于false,那么用户将被重定向到根域路径。但它不起作用。 这是班级

class security {
    function checkAuth() {
        if(isset($_COOKIE['AUTHID'])) {
            $cookie = $this->secure($_COOKIE['AUTHID']);
            $query = mysql_query("select username,password,active from tbl_users where password = '$cookie'") or die(mysql_error());
            while($row = mysql_fetch_assoc($query)) {
                //check if cookie is set
                if(!isset($_COOKIE['AUTHID'])) {
                    header("Location: ".realpath($_SERVER['HTTP_HOST']));
                }

                //check if user is active
                if($cookie == $row['password']) { 
                    if($row['active'] == '0') {
                        setcookie("AUTHID","",time() - 100000);
                        header("Location: ".realpath($_SERVER['HTTP_HOST']));
                    }
                    else { //user is active
                    }
                }
                //check if hash in cookie matches hash in db
                if($cookie != $row['password']) { 
                    setcookie("AUTHID","",time() - 100000);
                    header("Location: ".realpath($_SERVER['HTTP_HOST']));
                }
            }
        }
    }
}
?>

5 个答案:

答案 0 :(得分:6)

  1. 我认为在一个类中重定向/直接输出是一个好主意,原因很多,最重要的是它无视OO的全部要点。而是返回false并让调用脚本执行重定向。
  2. 你需要发送标题作为你做的第一件事,如果PHP已经开始输出文本,那么基于标题的重定向将不起作用,因为标题已经被发送。
  3. 尝试

    $_SERVER['SCRIPT_URI'];
    

    "http://" . $_SERVER['HTTP_HOST'];
    

    而且,是的,退出();发送该标题后。

    不要忘记为重定向发送适当的30x header response code

答案 1 :(得分:3)

为什么不简单:

header('Location: /');

答案 2 :(得分:3)

来自PHP doc

  

'HTTP_HOST':当前请求中Host:header的内容(如果有)。

在我看来,这是从客户端浏览器发送的值,因为客户端可以更改请求标头,我认为最好使用SERVER_NAME:

  

'SERVER_NAME'当前服务器主机的名称   脚本正在执行。如果脚本在虚拟主机上运行,   这将是为该虚拟主机定义的值。

我认为正确的做法是:

header("Location: http://{$_SERVER['SERVER_NAME']}/");
die();

评论“位置:/”

Header Field Definitions中所述,通过位置标头重定向应使用包含http://www.servername.com/redirect/to/this/resource.html的绝对URI,而不仅仅是/redirect/to/this/resource.html。 (但它可以重定向到/,但它不是100%正确的。)

编辑:自2014年6月起,可以使用绝对和相对网址。请参阅已替换旧版RFC 7231RFC 2616,其中只允许使用绝对网址。

答案 3 :(得分:0)

realpath function正在处理文件系统并返回规范化的绝对​​文件系统路径。

但你需要的是一个URI。所以试试这个:

header("Location: http://".$_SERVER['HTTP_HOST']."/");
exit;

答案 4 :(得分:0)

我在所有开发程序中,在包含非公共脚本的每个目录中使用它......

<?php $url = 'http://' . $_SERVER['HTTP_HOST']; header('Location: ' . $url, true, 301);?>