1

PHP のセッションを使用してアクセスを制限する非常に単純なログイン スクリプトを作成しましたが、非常に奇妙な問題が発生しています。正しい資格情報を使用しても、最初の試行では常にログインに失敗しますが、2 回目以降の試行は問題なく機能します。原因が分からず困っていますので、どなたかご教授いただければ幸いです。

関係のないコードが削除されたログイン フォーム (はい、ログイン情報をプレーン テキストとして PHP ファイル内に保存することは通常は悪い考えですが、この場合は関係ありません):

<?php

$username = $_POST['username'];
$password = $_POST['password'];

$valid_user = "user";
$valid_password = "password";


if (($_POST['op'] == "ds") && ($username == $valid_user) && ($password == $valid_password)) {
    session_start();
    session_register('valid');
    $_SESSION['valid'] = 'yes';
    header("Location: valid.php");
}

?>

<p>Username:<br>
<input type="text" name="username" size=15 maxlength=25></p>
<p>Password:</strong><br>
<input type="password" name="password" size=15 maxlength=25></p>
<input type="hidden" name="op" value="ds">
<p><input type="submit" name="submit" value="login"></p>

認証が必要なすべてのページには

require "auth.php"

auth.php:

<?php

session_start();

if($_SESSION['valid'] != 'yes') {
    header("Location: login.php");
}

?>
4

1 に答える 1

3

die()アフターを試す

header("Location: valid.php");

直後にログインフォームをブラウザに出力しているため、無視される可能性があります。

さらに、 adie()は後に必須です

header("場所: login.php");

スクリプトがそれに続くものを出力する場合。そうしないと、リクエストしているクライアントがログインしていなくても機密情報を受け取る可能性があります。

于 2010-09-19T19:05:11.780 に答える