ログイン後の前のページへのリダイレクト
Web サイトにログインするとき、ユーザーが表示していたページにリダイレクトされると便利なことがよくあります。この質問では、ユーザーが意図したページではなく、index.php にリダイレクトされるコードの問題について調査します。
提供されたサンプル コードでは、login-check.php スクリプトがログイン ステータスを判断し、パラメータ(p)をlogin.phpページにリダイレクトします。ただし、ユーザーを目的のページに誘導する代わりに、index.php にリダイレクトします。
この問題を解決するには、次の解決策が提案されています:
-
ユーザーの現在のページをクエリ文字列として渡す:
- ユーザーの現在のページを保存する非表示の入力フィールドを含めるようにログイン フォームを変更します。これは、login.php スクリプトで $_SERVER['REQUEST_URI'] を渡すことで実行できます。
- たとえば、ユーザーが記事 (comment.php?articleid=17) を読んでいて、その場を離れようとした場合コメントの場合、URL は次のように変更されます:
login.php?location=comment.php?articleid=17
-
Handle "Location" クエリ文字列in login-check.php:
- login-check.php スクリプトで、$_POST['location'] が設定されているかどうかを確認します。存在する場合は、$redirect 変数に保存します。
-
ログイン ステータスと場所に基づいてリダイレクト:
- ログインに成功した場合は、$redirect でリダイレクト URL が利用可能かどうかを確認します。その場合は、ユーザーをそのページにリダイレクトします。それ以外の場合は、index.php にリダイレクトします。
- ログインが失敗した場合、またはユーザーがすでにログインしている場合は、適切なエラー メッセージを処理するか、必要に応じてリダイレクトします。
-
リダイレクト URL の検証:
ユーザーをリダイレクトする前に $_GET['location'] 値を検証して、ユーザーが悪意のある URL にアクセスしようとしていないことを確認することが重要です。
-
エンコードクエリ文字列:
特殊文字を適切にエンコードするには、$_GET パラメータとして URL を渡すときに urlencode を使用します。
これらの変更を実装すると、ユーザーは以前に表示していたページに正常にリダイレクトされます。ログイン後はシームレスなユーザー エクスペリエンスを保証します。
以上がログイン後に前のページではなく、index.php にリダイレクトされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。