2

私は突然奇妙な問題を抱えているようで、誰かが提案をしてくれることを望んでいました...

ログインが失敗した場合にエラーメッセージを含むセッション変数を登録し、ユーザーを元のページにリダイレクトするログインスクリプトがあります。たとえば、ユーザーが index.php のフォーラムを使用した場合、ログインに失敗し、スクリプトがセッション変数に含まれるエラー メッセージを表示する index.php に戻ります。

ただし、セッション変数は保存されていないようです。記録として、ログイン スクリプトで session_start() を使用しています。また、ログインに失敗したためにユーザーがそのページに戻った場合にエラー メッセージを表示する必要があるログイン フォームを含むページでも使用しています。

私のスクリプトは次のとおりです。

if (isset($_POST['prev'])) {
  $prev = $_POST['prev'];
}
else {
  $prev = "login.php";
}
$_SESSION['Login_Error'] = $error;
header("Location: $prev");

次に、フォーム ページのスクリプトは次のとおりです。

if (isset($_SESSION['Login_Error'])) {
  echo $_SESSION['Login_Error'];
}

そして、私が得ているエラーは次のとおりです。

Notice: Undefined index: Login_Error in F:\EasyPHP-12.0\www\index.php on line 3

なぜ保存されないのかについてのアイデアはありますか?ログインが成功すると、スクリプトは正常に機能しているユーザー ID セッション変数を設定します。提案をありがとう。

4

3 に答える 3

1

あなたが持っている場合、さらに下のある時点で、unset($_SESSION['Login_Error'])または同様のもの.. . $_SESSION['Login_Error'] = nullたとえば..これは問題を引き起こす可能性があります。

これは、リダイレクトするヘッダーが送信された後、残りの php スクリプトが引き続き実行されるためです。

die()ヘッダーの後にorを配置するexit()と、残りのスクリプトの実行が停止するため、スクリプトのどの時点でも変数が設定解除されていないことを確認してください。

お役に立てれば。

于 2013-03-25T21:51:57.863 に答える
0

セッション変数を宣言する前に、セッションを開始する必要があります。

http://php.net/manual/es/function.session-start.php

また、セッション変数を現時点で保存できない遅いマシンにはバグがあります。

タイムアウト ヘッダーを使用してみてください。

header("refresh:3;url=".$prev);

リフレッシュ ヘッダーの詳細については、http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Refreshを参照してください。

于 2013-06-06T21:22:01.760 に答える