web-dev-qa-db-ja.com

PHPヘッダー関数を使用してクライアントをリダイレクトすることは、クライアントの最新のブラウザーで常に機能しますか?

ユーザーが間違ったパスワードを書き込んだ場合、ユーザーをログインページにリダイレクトします。私は通常、間違ったパスワードなどを入力するときにheader(location: "login.php?msg=wrong password");を使用します。

  1. この方法は最新のブラウザーで常に機能しますか?古いものはどうですか?ブラウザがリダイレクトを許可しない可能性はありますか? (古いブラウザでしか動作しない場合は、何歳でどのブラウザですか?)

  2. これはユーザーをリダイレクトする最良の方法ですか?前述の例の例では、プロのWeb開発者は、ユーザーをリダイレクトしてGET変数をそのURLに送信するというこの問題をどのように解決しますか?

headerを使用してユーザーを同じページに、場合によっては別のページにリダイレクトすることに注意してください。私の主な関心事は、get変数が設定されたページ(別のページまたは同じ)そのページで。

編集:私はこれを述べる必要さえありませんでしたが、答えに基づいて私はすべきだと思います:はい、PHPはバックエンドであり、サーバーで動作することを知っていますクライアントではありません!私は、クライアントのブラウザがサーバーによって送信されるリダイレクトをサポートすることを意味する最新のブラウザを実行するよう求めています。タイトルで「クライアントをリダイレクトする」と言ったとき、サーバーをリダイレクトするつもりはありませんでした。

1
John P

すべての主要なブラウザはリダイレクトをサポートしており、20年にわたってシームレスにサポートしています。

リダイレクトをうまくサポートしなかった最後のブラウザはNetscape 4でした。それは1997年頃でした。それでもリダイレクトは機能しましたが、

  • 画面が点滅します。
  • リダイレクトURLが履歴に追加されました。つまり、リダイレクト後にページから戻るボタンを使用することは困難でした。ユーザーは、[戻る]ボタンを2回すばやく押す必要があります。そうしないと、リダイレクトを再度取得することになります。

通常、ブラウザが機能をサポートしているかどうかについて質問がある場合は、 https://caniuse.com/ を参照してください。ただし、リダイレクトは非常に長い間機能しているため、カバーする価値があるブラウザ機能であるとは感じていません。

パラメータを含めるためのリダイレクトも完全にサポートされています。サンプルのリダイレクトは、最新のすべてのブラウザーで意図したとおりに機能します。

リダイレクトは本当にうまく機能しますが、おそらくあなたの特定の問題に対する正しい解決策ではありません。理想的には、ログインフォームは、クレデンシャルをチェックする同じPHPファイルによって生成されます。これにより、リダイレクトを実行せずに、エラーメッセージと共にフォームを再度表示できます。通常、リダイレクトはsuccessfulログイン後に使用され、ログイン後に次に表示する必要があるページにユーザーを誘導します。

3

リダイレクトは、PHP経由でバックエンドで行われます。したがって、最新のブラウザがサポートしているかどうかは問題ではありません。このコードは、ユーザー(またはホスト)のサーバーで実行されます。ブラウザでは実行されないため、ブラウザのエディションに関係なく、バージョン管理による問題は発生しません。

質問の2番目の部分に答えるために、ほとんどのサイトでは、偽のパスワードの場合にリダイレクトはありません。フロントエンド/バックエンドでいくつかのチェックが実行され、ユーザーに自分の資格情報が間違っていることを通知するメッセージが(同じページに)表示されます。ほとんどの場合、エラーメッセージを表示するためだけにまったく新しいページを作成する正当な理由はありません(特に、ユーザーが再試行する場合があるため、ログインページに戻る必要があり、面倒です)。

したがって、リダイレクトするのではなく、情報メッセージを同じページに表示するだけです。

最後に、資格情報の送受信にGETを使用することは悪い習慣です。特に資格情報のような機密データの場合、実行する検証にPOSTを使用することをお勧めします。

編集

これはブラウザのバージョンとは何の関係もありませんが、HTTPの仕組みに関するものです。 詳細についてはこちらをご覧ください しかし、基本的な前提は

ブラウザーは、リダイレクト応答を受信すると、提供された新しいURLを使用し、すぐにそれをロードします

それを行うブラウザは、そのバージョンとは関係ありません。 HTTPの仕組みです。