7

送信されたユーザー名/パスワードをチェックするログインフォームが自分のWebサイトにあります。一致するものがない場合、ユーザーはログインページに戻され、適切なエラーメッセージが表示されます。このリダイレクトの呼び出しは次のとおりです。

header("location:../login.php?error_message=$error_message");

これは正常に機能しますが、ブラウザのアドレスバーでは乱雑に見えます(特に説明的なエラーメッセージの場合)。$ _GET変数を使用せずにこの自動リダイレクトを行う方法はありますか?$ _SESSION変数の使用を検討しましたが、それは最良のコーディング方法ではないようです。

読んでくれてありがとう。

4

5 に答える 5

7

より単純なGET変数を使用するのはどうですか?

// something.php
header ("Location: foo.php?err=1");

そして、エラーを処理するページで:

// foo.php
$errors = array (
    1 => "Hello, world!",
    2 => "My house is on fire!"
);

$error_id = isset($_GET['err']) ? (int)$_GET['err'] : 0;
if ($error_id != 0 && in_array($error_id, $errors)) {
    echo $errors[$error_id];
}

お役に立てれば。

于 2013-03-26T10:51:10.653 に答える
1

セッションを使用したくない場合は、代わりにエラーコードを使用できます。

header('Location: ../login.php?error=' . urlencode($error_code));

次に、内部login.php

if (isset($_GET['error'])) {
    switch ($_GET['error']) {
        case 123: // ...
            break;
    }
}

かさばるスイッチの代わりに、代わりにエラーメッセージのルックアップ配列を使用できます(言語に依存する場合があります)。

ところで、ヘッダーリダイレクトで相対URIを使用することはお勧めしません。絶対(例/login.php)または完全修飾URI(例http://example.org/login.php)をお勧めします。

于 2013-03-26T10:52:09.117 に答える
1

フォームの検証には、次の3つのオプションがあります。

  1. AJAXを使用して検証します。したがって、リダイレクトする必要はまったくありません。
  2. リダイレクトとセッションを使用して、入力したデータとともにエラーメッセージを保存します。
  3. POST / Redirect/GETパターンの一部としてリダイレクトを使用する

個人的には、フォームに(1)と(3)を実装します。(1)通常のユーザーの便宜のため、および(3)私のようなパラノイドとの下位互換性のため。

セッションを使用することは、どのような状況でも履歴にPOSTされたページを残さないため、実際にredirecベースの検証にとって最もクリーンな方法です。ただし、AJAXベースの検証が存在する場合は、少しやり過ぎのようです。

于 2013-03-26T10:57:39.690 に答える
0

セッションベースのフラッシュメッセージを使用できます。

この例を見てください:http://mikeeverhart.net/php/session-based-flash-messages/

于 2013-03-26T10:49:10.287 に答える
-3

セッションを使用することは良いオプションです。エラーが表示されたらすぐにセッション値をクリアできます。ただし、セッションを使用したくない場合は、次のようにURLを変更できます。

// login failed
header("location:../login.php?status=0");

私はセッションを使用することを好みます。

于 2013-03-26T10:51:30.610 に答える