0

この人がCookieを使用して自分のサイトにログインしているかどうかに応じて、どのリンクを表示するかをphpに選択させようとしています。これを自分でコーディングしようとしましたが、機能していません。これが私のコードです:

<?php
if(isset($_COOKIE['maxgee_me_user'])) {
$username = $_COOKIE['maxgee_me_user']; 
$password = $_COOKIE['maxgee_me_password']; 
$check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))   

    { 



//if the cookie has the wrong password, echo's login 

    if ($password != $_COOKIE['maxgee_me_password']) 

        {           ?> <a href="logout.php"><?php echo "Logout"; ?></a> &nbsp;&nbsp 
         <?php
    else {
    ?> <a href="loginpage.php"><?php echo "User Login";} ?></a> &nbsp;&nbsp;
4

3 に答える 3

1

クエリからパスワードを読み取ることはありません。あなたはこれを一番上に持っています:

$password = $_COOKIE['maxgee_me_password']; 

そして、あなたはそれをさらに下のそれ自体と比較しています:

if ($password != $_COOKIE['maxgee_me_password']) 

比較を次のように置き換えることで修正できます。

if ($password != $info['password']) 

また、中括弧がいくつか欠落しています。elseスクリプトの終わりでない場合は、コードの前と最後に1つ追加する必要があります。フォーマットと上記の修正:

<?php
if(isset($_COOKIE['maxgee_me_user'])) {
    $username = $_COOKIE['maxgee_me_user']; 
    $password = $_COOKIE['maxgee_me_password']; 
    $check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
    $info = mysql_fetch_array( $check );
    //if the cookie has the wrong password, echo's login 
    if ($password != $info['password']){ ?>
        <a href="logout.php">Logout</a> &nbsp;&nbsp;
    <?php }else{ ?>
        <a href="loginpage.php">User Login</a>&nbsp;&nbsp;
    <?php
    }
}
?>
于 2012-10-23T02:08:10.630 に答える
0
<?php
    if(isset($_COOKIE["maxgee_user"])) {
        $username = $_COOKIE["maxgee_user"];
        $password = $_COOKIE["maxgee_password"];
        $q = mysql_query("SELECT password FROM users WHERE username = '".$username."' AND password = '".$password."'");
        if(mysql_count_rows($q) > 0){
          print("<a href='/logoutpage.php'>Logout</a>");
        }else{
          print("<a href='/loginpage.php'>Login</a>");
        }
     }else{
          print("<a href='/loginpage.php'>Login</a>");
     }
 ?>

速くて汚い。私が開発を行ってから何年も経ちました。PHPで、しかし私はまだ本質を覚えていると思います。Cookieに保存されている入力を含め、入力を絶対に信頼しないでください。信頼しないと、エクスプロイトに対して脆弱になります。頑張ってね!

于 2012-10-23T02:25:20.890 に答える
0

コードにかなりのエラーがあります。まず、有効なユーザーが存在するかどうかを確認するときに、ユーザー名とパスワードの両方を使用する必要があります。pwdもテーブルに保存されていると仮定します。

    $check = mysql_query("SELECT * FROM users WHERE username = '$username' AND password='$password'") or die(mysql_error());

そして、mysql_num_rows($ check)> 0を使用して、有効なユーザーが見つかったかどうかを確認します。以下は完全なコードですが、これはあなたがそれに取り組んでいるとあなたが言う悪いコーディング慣行であることに注意してください。

<?php
if(isset($_COOKIE['maxgee_me_user']))
{
    $username = $_COOKIE['maxgee_me_user']; 
    $password = $_COOKIE['maxgee_me_password']; 
    $check = mysql_query("SELECT * FROM users WHERE username = '$username' AND password='$password'") or die(mysql_error());
    if (mysql_num_rows($check)>0) 
    {

        ?>
        <a href="logout.php">Logout</a> &nbsp;&nbsp 
        <?php
    }
    else
    {
        ?>
        <a href="loginpage.php"><?php echo "User Login"; ?></a> &nbsp;&nbsp;
        <?php
    }
}
else
{
    ?>
    <a href="loginpage.php"><?php echo "User Login"; ?></a> &nbsp;&nbsp;
    <?php
}
?>
于 2012-10-23T02:27:33.130 に答える