Http URL保护在localhost中有效,但在服务器上失败

时间:2012-04-05 12:50:14

标签: php mysql http url

使用this code验证我的网址。

  1. 我的localhost工作正常,但当我加载到服务器(goDaddy)时,它反复询问用户名和密码。

  2. 我想控制这些用户名和密码字段并将它们连接到我的数据库。

  3. 因为我正在使用这样的代码:

    $conid = mysql_connect("localhost", "root", "");
    if(!$conid) {
      die("sorry unable to establish a connection".mysql_error());
    }
    echo "connected succesfully<br>";
    mysql_select_db("passurl", $conid);
    $rr = mysql_query("select password from validate where username='$user' ");
    while($row = mysql_fetch_array($rr)) {
      $x = $row['password'];
    }
    if($x == $password) {
      //take into the website
    }
    

    所以当用户名和&amp;密码由用户输入,成功验证后进入该页面。

    我正在使用PHP-MYSQL,因为我已经初步了解它,是编程的新手。

    请帮助我使用合适的测试代码解决上述两个问题。

    修改: 问题1在本地工作,并使用链接中提供的相同代码。问题二是我试图从我的本地数据库中检索那些usernamepassword字段,以便可以在我的本地主机上授予登录(如果它在以后的阶段工作,我会将数据库带到在线) 。

    修改-2:

    ty.php包含类似

    的代码
    <?php
    
    $auth_realm = 'Access restricted';
    
    require_once 'auth.php';
    
    echo "You've logged in as {$_SESSION['username']}<br>";
    echo '<p><a href="?action=logOut">LogOut</a></p>'
    
    ?>
    
    <center><h1>now you see the protected content</h1></center>
    

    auth.php包含

    <?php   
      $_user_ = 'test';
      $_password_ = 'test';
      session_start();
    
    $url_action = (empty($_REQUEST['action'])) ? 'logIn' : $_REQUEST['action'];
    $auth_realm = (isset($auth_realm)) ? $auth_realm : '';
    
    if (isset($url_action)) {
        if (is_callable($url_action)) {
            call_user_func($url_action);
        } else {
            echo 'Function does not exist, request terminated';
        };
    };
    
    function logIn() {
        global $auth_realm;
    
        if (!isset($_SESSION['username'])) {
            if (!isset($_SESSION['login'])) {
                $_SESSION['login'] = TRUE;
                header('WWW-Authenticate: Basic realm="'.$auth_realm.'"');
                header('HTTP/1.0 401 Unauthorized');
                echo 'You must enter a valid login and password';
                echo '<p><a href="?action=logOut">Try again</a></p>';
                exit;
            } else {
                $user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : ''; 
                $password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; 
                $result = authenticate($user, $password);
                if ($result == 0) {
                    $_SESSION['username'] = $user;
                } else {
                    session_unset($_SESSION['login']);
                    errMes($result);
                    echo '<p><a href="">Try again</a></p>';
                    exit;
                };
            };
        };
    }
    
    function authenticate($user, $password) {
        global $_user_;
        global $_password_;
    
        if (($user == $_user_)&&($password == $_password_)) { return 0; }
        else { return 1; };
    }
    
    function errMes($errno) {
        switch ($errno) {
            case 0:
                break;
            case 1:
                echo 'The username or password you entered is incorrect';
                break;
            default:
                echo 'Unknown error';
        };
    }
    
    function logOut() {
    
        session_destroy();
        if (isset($_SESSION['username'])) {
            session_unset($_SESSION['username']);
            echo "You've successfully logged out<br>";
            echo '<p><a href="?action=logIn">LogIn</a></p>';
        } else {
            header("Location: ?action=logIn", TRUE, 301);
        };
        if (isset($_SESSION['login'])) { session_unset($_SESSION['login']); };
        exit;
    }
    
    ?>
    

    所以一旦我们点击ty.php它会询问用户名和密码,并且成功验证后会显示受保护的下载。所有这一切在localhost中工作正常但它不在服务器上工作。

    有人可以帮我解决这个问题 在此先感谢:)

2 个答案:

答案 0 :(得分:0)

您需要在goDaddy托管服务root上创建数据库用户名和密码,空密码无法通过。 root是本地服务器的默认用户名,并且您没有为其设置任何密码,因此""可以作为密码使用。您必须在远程服务器上设置用户名和密码才能使用。

mysql_connect("your-host-server", "a-username", "a-secret-password"); // Password can't be empty and username can't be root, hope you understand

答案 1 :(得分:0)

您正在循环密码,但只在循环后检查单个值。

您的代码是:

while($row = mysql_fetch_array($rr)) {
  $x = $row['password'];
}
if($x == $password) {
  //take into the website
}

应该是:

while($row = mysql_fetch_array($rr)) {
    if ($password == $row['password']) {
        // take into the website
    }
}