首页 文章

PHP使用mysql登录授权错误

提问于
浏览
-2

之前已经问过这类问题,虽然我仍然遇到问题,但这也是PHP最新的语法 .

我不确定我是否正确登录,似乎无论何时我登录它运行if(isset)以及if(!authorized)

任何朝着正确方向的帮助都会非常感激 .

登录 . PHP

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
        <tr>
        <form name="form1" method="post" action="checklogin.php">
        <td>
        <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
        <tr>
        <td colspan="3"><strong>Member Login </strong></td>
        </tr>
        <tr>
        <td width="78">Username</td>
        <td width="6">:</td>
        <td width="294"><input name="myusername" type="text" id="myusername"></td>
        </tr>
        <tr>
        <td>Password</td>
        <td>:</td>
        <td><input name="mypassword" type="text" id="mypassword"></td>
        </tr>
        <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td><input type="submit" name="Submit" value="Login"></td>
        </tr>
        </table>
        </td>
        </form>
        </tr>
        </table>

checklogin . php //在PHP中这是做注释的方式,也是重新打开PHP . DEFINE('DB_USER','root'); //定义数据库用户DEFINE('DB_PSWD',''); //定义数据库密码DEFINE('DB_HOST','localhost'); //定义数据库主机DEFINE('DB_NAME','照片'); //定义数据库名称 .

$tbl_name="userpass"; // Table name 
        $dbcon = mysql_connect(DB_HOST, DB_USER, DB_PSWD, DB_NAME);         // Connecting to mySQL with defined above.

        if (!$dbcon){                                                       // If error in connecting, mySQL error. 
            die('Could Not Connect: ' . mysql_error());                     // Give mySQL error.
        }                                                                   

        $db_selected = mysql_select_db(DB_NAME, $dbcon);                    // Selecting Database based on name.

        if (!$db_selected){                                                 // If error in connecting, mySQL error.
            die('Could Not Use: ' . DB_NAME . ' : ' . mysql_error());       // Give mySQL error.
        }

        // username and password sent from form
        $myusername=$_POST['myusername'];
        $mypassword=$_POST['mypassword'];

        // To protect MySQL injection (more detail about MySQL injection)
        $myusername = stripslashes($myusername);
        $mypassword = stripslashes($mypassword);
        $myusername = mysql_real_escape_string($myusername);
        $mypassword = mysql_real_escape_string($mypassword);

        $sql="SELECT * FROM " . $tbl_name." WHERE user='".$myusername."' and password='".$mypassword."'";
        $result=mysql_query($sql);

        // Mysql_num_row is counting table row
        $count=mysql_num_rows($result);

        // If result matched $myusername and $mypassword, table row must be 1 row

        if($count==1){
        session_start();            
        $_SESSION['$myusername'];
        $_SESSION['$mypassword'];
        header("location:loggedin.php");
     }
     else {
     session_unset();
     session_destroy();
     $_SESSION = array();
     session_start();        
     }

登录 . PHP

// Check if session is not registered, redirect back to main page.
    // Put this code in first line of web page.
    $authorized=false;
    @session_start();
    if(isset($_SESSION['myusername'],$_SESSION['mypassword']))
    {
        $authorized = true;
    }

    if(!authorized)
    {
        header('location:login.php');
        exit();
    }


        Login Successful

2 回答

  • 0

    你设置它的方式,你真正想要的是

    $_SESSION['myusername'] = $myusername;
    $_SESSION['mypassword'] = $mypassword;
    

    你现在正在做的是使用文字用户名和密码的密钥从会话中检索值,而不是使用键'myusername'和'mypassword'将值插入到会话中 .

    当我们讨论这个主题时,您不希望在会话中或其他任何地方存储密码 . 确保存储密码的哈希值和哈希值 . 当用户提供密码时,在服务器端散列它并将得到的散列与存储在数据库中的散列进行比较 .

  • 1

    在checklogin.php中,您可以按如下方式设置变量

    $_SESSION['$myusername'];
    $_SESSION['$mypassword'];
    

    在loggedin.php中,您按如下方式检查了它们

    if(isset($_SESSION['myusername'],$_SESSION['mypassword']))
    

    名称是不同的,因为你在checklogin.php中使用“$”作为会话的密钥,并且不在loggedin.php中使用它,我不建议你这样做,我建议你设置

    $_SESSION['logged_in'] = 1;
    

    然后在loggedin.php中检查有效性 . 另外我注意到你在loggedin.php文件中的if子句中缺少一个“$”,所以它应该成为

    if(!$authorized)
    

相关问题