2012-01-28 10 views
1

データベースを使用せずにログインするには、以下のPHPコードを使用します。 (実際のユーザ名を除く)のユーザー名とするとI入力、正しいユーザー名とパスワード
2. I入力は任意の文字/ sの
1.とパスワードのテキストボックスを空白のまま:
それは2つの場合にhome.phpにリダイレクトします。
データベースを使用しないPHPログインスクリプト

その他の場合は、2番目を除いて、コードは正常に動作します。
コードを2番目のケースで正しく動作させるにはどうすればよいですか?入力したユーザー名があなたの配列、$ userinfoを[ 'idontexist']戻っていない場合ので、あなたはそれが失敗している

if($userinfo[$_POST['username']] == $_POST['password']) { 

if(isset($userinfo[$_POST['username']]) && $userinfo[$_POST['username']] == $_POST['password']) { 

に理由がある変更される可能性が

<?php 
session_start(); 

$userinfo = array(
       'user1'=>'pass1', 
       ); 

if(isset($_GET['logout'])) { 
    $_SESSION['username'] = ''; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
} 

if(isset($_POST['username'])) { 
    if($userinfo[$_POST['username']] == $_POST['password']) { 
     $_SESSION['username'] = $_POST['username']; 

     header('Location: home.php'); 
    }else { 
     header('Location: login.php'); 
    } 
} 
?> 
+1

なぜこの行を使っていますか?if($ userinfo [$ _ POST ['username']] == $ _POST ['password']) '? – Lion

+0

入力されたユーザ名とパスワードが、username =>パスワードの組み合わせが格納されている '$ userinfo'配列と一致していることを確認しています。 – drew010

+0

ああ!私はJava環境からのもので、何かを知りたいので、PHPでそのような表現を見たことはありません。 – Lion

答えて

2

空の文字列に評価されるので、最終的にはnull == ''となります。

変更されたコードでは、最初に入力したユーザー名が実際に配列に存在することを確認します。そうでない場合、パスワードチェックは決して実行されず、ログインページにリダイレクトされます。

代わりに===を使用して2つを比較することもできますが、誰かがフォームを編集してパスワードフィールドを削除して$_POST['password']がnullになり、存在しないユーザーを入力するとnull nullにするとログインできます。issetチェックを使用して、ユーザー名が配列に存在することを確認した後、パスワードを比較します。

セキュリティのために、パスワードが空であるかどうかを確認し、パスワードチェックをスキップしてすぐにログインページに戻ることができます。

EDIT: が希望2例を許可するには、試してください:ユーザー名が配列である場合はそのパスワードが一致することを確認した場合、

if ((isset($userinfo[$_POST['username']]) && $userinfo[$_POST['username']] == $_POST['password']) || (!isset($userinfo[$_POST['username']]) && strlen($_POST['username']) > 0 && $_POST['password'] === '') {

このチェックを、ORていることを確認usernameは配列にはなく、パスワードが空であることを確認してください。

+0

これはチェックしていません。「実際のuseranameを除いてユーザー名としてcaracter/sを入力し、パスワードのテキストボックスを空白のままにします。 –

+0

まあ、私は質問を誤解していたと思います。私は間違ったユーザー名とパスワードなしでログインを許可する理由がわからない。私の答えは無効です。 – drew010

+0

最初に質問を読んでください... "これは2つのケースでhome.phpにリダイレクトされます:" –

関連する問題