3

私は3つのファイルを持っています

  • index.php
  • login.php
  • auth.php

私のログイン フォームは、私の index.php に基づいています。インデックスページにlogin.phpを含めます。

私はそれが欲しいので、ログインすると、auth.phpによって認証され(そうです)、auth.phpに「あなたのログインは成功しました」というメッセージが表示されます(そうです)が、インデックス ページに戻ると、「Welcome USER you has successfully login.

他に何が問題なのかわからないため、主にセッションからエラーが発生したと思います。

これが各ページの私のコードです。

Index.php:

<?php include ("login.php"); ?>

login.php

<?php
if ($loggedin){
    echo '<h2>Logged in</h2><p style="font-size:14px;">Welcome '.$user.' you have sucessfully logged in.</p>';
}
else {
     echo '
       <h2>Login</h2>
       <form action="auth.php" method="POST">
       <div class="smallform">
                <p><span>Username:</span><br>
                <input type="text" name="user"></p>
                <p><span>Password:</span><br>
                <input type="password" name="pass"></p>
                <p style="padding-top: 15px"><input type="submit" value="Submit"></p>
        </div>
        </form>';
}
?>

認証.php:

<?php
session_start();
$con = mysqli_connect("HoST", "USER", "PASS", "DBNAME");
$user = $_POST["user"];
$pass = $_POST["pass"];
$sql = "SELECT UserID FROM Customer 
        WHERE UserID = \"$user\"
        AND Password = md5(\"$pass\")";

$res = mysqli_query($con, $sql);
?>
<!DOCTYPE>
<html>

<head>
<title>VeloCity</title>
<link href="_stylesheet.css" rel="stylesheet" type="text/css" />
<?php echo '<meta http-equiv="refresh" content="1;URL=index.php" />'; ?>
</head>

<body>
<div align="center">
<?php 
if(mysqli_num_rows($res)==1){
    $_SESSION["user"] = $user;
    echo "You have sucessfully logged in";
}
else{
    echo "You have entered an incorrect password. Please try again";
}
?>
</div>
</body>
</html>

助けていただければ幸いです。

4

3 に答える 3

2

セッションでは、session_start(); を配置するのが最善です。ページの一番上にあります。これにより、セッション設定エラーが回避されます。

アクセスを制限したいページごとに、session_start(); を適用する必要があります。すべてのページで。

その後、カスタム セッション ルールを追加できます。したがって、データベース チェックの後、次のように Auth.php ファイル内にセッション変数を作成する必要があります。

$_SESSION['loggedin']['username']=$_POST['users'];
$_SESSION['loggedin']['bros'] = md5($_SERVER['HTTP_USER_AGENT']); // To secure not needed in some cases.

次に、他のすべてのページについて、セッションが存在することを確認します。

if(isset($_SESSION['loggedin'])){
    //view page = true
}

編集: より良い検証;

if(!isset($_SESSION['loggedin']) || $_SESSION['loggedin']['bros'] !== md5($_SERVER['HTTP_USER_AGENT']))
{
    die('No access');
    sleep(1);
    header('location:Auth.php');
}

それをインデックスページの上部に適用し、include(Auth.php); を削除します。それはうまくいくはずです。

于 2012-11-23T14:31:31.680 に答える
0

こんにちはモハメッド、ようこそ。

あなたはもうすぐそこにいます、あなたは設定します

$_SESSION["user"] = $user;

そしてあなたは検証します

if ($loggedin){
  echo '<h2>Logged in</h2>...'
}

あなたはおそらく次のようなことをしているはずです

if(isset($_SESSION["user"]) && !empty($_SESSION["user"])) { 
  echo '<h2>Logged in</h2>...' \
}

設定されていない変数をチェックしていたため、デフォルトでは false でした。

于 2012-11-23T14:24:58.577 に答える
0

$loggedin をどこにも設定しないでください。

login.php の次の部分を変更します。

if ($_SESSION["loggedin"]){
    echo '<h2>Logged in</h2><p style="font-size:14px;">Welcome '.$_SESSION["user"].' you have sucessfully logged in.</p>';
}

...そしてAuth.phpで...

if(mysqli_num_rows($res)==1){
    $_SESSION["user"] = $user;
    $_SESSION["loggedin"] = True;
    echo "You have sucessfully logged in";
}

ログインフラグを保存するのではなく、 $_SESSION["user"] の値を確認することもできますが。

于 2012-11-23T14:27:14.653 に答える