页面重定向不起作用

时间:2013-08-30 05:48:54

标签: php mysql session cookies

当我从apache运行index.php时,我抓了一段代码登录和注册脚本,它在地址选项卡中给出了这个错误

http://localhost/johnlogin/?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login?msg=login

以及浏览器页面上的以下错误

页面未正确重定向

Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。

有时可能会因禁用或拒绝接受Cookie而导致此问题。

我挖出了代码,但无法解决这里的问题,这是index.php的代码

require_once('load.php');
$logged = $j->checkLogin();

if ( $logged == false ) {
    //Build our redirect
    $url = "http" . ((!empty($_SERVER['HTTPS'])) ? "s" : "") . "://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
    $redirect = str_replace('index.php', 'login.php', $url);

    //Redirect to the home page
    header("Location: $redirect?msg=login");
    exit;
} else {
    //Grab our authorization cookie array
    $cookie = $_COOKIE['joombologauth'];

    //Set our user and authID variables
    $user = $cookie['user'];
    $authID = $cookie['authID'];

    //Query the database for the selected user
    $table = 'j_users';
    $sql = "SELECT * FROM $table WHERE user_login = '" . $user . "'";
    $results = $jdb->select($sql);

    //Kill the script if the submitted username doesn't exit
    if (!$results) {
        die('Sorry, that username does not exist!');
    }

    //Fetch our results into an associative array
    $results = mysql_fetch_assoc( $results );

>

load.php基本上包含一个require_once语句,它在这里加载db和一个类文件,这是由

调用的id的类代码
$logged = $j->checkLogin();

--------- class.php代码-------

        function checkLogin() {
        global $jdb;

        //Grab our authorization cookie array
        $cookie = $_COOKIE['joombologauth'];

        //Set our user and authID variables
        $user = $cookie['user'];
        $authID = $cookie['authID'];

        /*
         * If the cookie values are empty, we redirect to login right away;
         * otherwise, we run the login check.
         */
        if ( !empty ( $cookie ) ) {

            //Query the database for the selected user
            $table = 'login';
            $sql = "SELECT * FROM $table WHERE uName = '" . $user . "'";
            $results = $jdb->select($sql);

            //Kill the script if the submitted username doesn't exit
            if (!$results) {
                die('Sorry, that username does not exist!');
            }

            //Fetch our results into an associative array
            $results = mysql_fetch_assoc( $results );

            //The registration date of the stored matching user
            $storeg = $results['user_registered'];

            //The hashed password of the stored matching user
            $stopass = $results['user_pass'];

            //Rehash password to see if it matches the value stored in the cookie
            $authnonce = md5('cookie-' . $user . $storeg . AUTH_SALT);
            $stopass = $jdb->hash_password($stopass, $authnonce);

            if ( $stopass == $authID ) {
                $results = true;
            } else {
                $results = false;
            }
        } else {
            //Build our redirect
            $url = "http" . ((!empty($_SERVER['HTTPS'])) ? "s" : "") . "://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
            $redirect = str_replace('index.php', 'login.php', $url);

            //Redirect to the home page
            header("Location: $redirect?msg=login");
            exit;
        }

        return $results;
    }
}

所有错误都在这里发生

问候

1 个答案:

答案 0 :(得分:0)

问题是您的脚本是递归重定向到自身。

问题是当您第一次尝试访问该页面时,该脚本会将您确定为未登录:if ( $logged == false )

它会将你重定向到带有params的login.php,它会进一步将它重定向到同一页面,因此你的脚本会继续循环。当您的Web服务器(apache)将其循环一段时间时,它会将请求标记为无法服务,从而导致错误。