2011-08-02 18 views
1

おそらく私はこれを考えていないかもしれませんが、ユーザーのログイン後にユーザーをリダイレクトする目的を理解したいと思います。たとえば、POSTアクションは、ユーザーの資格情報を/app/login.phpのようなものに送信し、認証後、実際にユーザーをリダイレクトせずにログインアプリケーションページにユーザーのランディングページをロードする可能性があります。しかし、ユーザーが代わりに新しいページにリダイレクトされた場合に起こることはありますか?推奨されていますが、ユーザーが潜在的にページを再読み込みしてフォームデータを再送信しないようにすること以外は、説明がありません。それはセキュリティのベストプラクティスとして推奨されています。なぜ私はその点でそれが行われるのか理論化することができますが、私は本当に "...誰もがそうしているからです。ログイン後にユーザーが新しいページにリダイレクトされる理由

ありがとうございます。

+0

「ログインアプリケーションページでユーザーのリンク先ページが読み込まれる可能性があります」 - リダイレクトとはどのように違いますか?そして、あなたはこれを一人も使わずにどうしますか? – Oded

+0

私は答えを書いただけでなく、質問をhttp://webmasters.stackexchange.comに移すために投票しました - それはもっとそうであると思います:) –

+0

@Jonathon Bolster:開発者の話題、そしてすべてのWeb開発者がそれを理解するわけではないという証拠があります。 – grossvogel

答えて

1

非常に簡単な点です。アドバイスがユーザーをリダイレクトする場合、通常は
Post-Redirect-Getメソッドを使用しています。そのため、ユーザーには通常、「あなたはリダイレクトされています」というメッセージなどが表示されません。サーバーは応答でリダイレクトを送信し、ブラウザは処理を行い、指定された場所に移動します。


短い例は:

1つの理由は機能性の分離です。あなたのログインページはログイン用のもので、ダッシュボードページはユーザーのアカウント(または類似のもの)を表示するためのページです。

よろしくお願いします。リダイレクトせずにログインページにダッシュボード/その他のページを追加するだけで、別の問題が発生する可能性があります。ユーザーが/ loginと/ dashboardを使用してダッシュボードにアクセスできる場合、ログインページをブックマークするとどうなりますか?また、POSTしたページにいる場合、ユーザーがページを更新したい場合、ブラウザはおそらく再ポストすることを警告します。純粋に使い勝手の良い見方から、Facebookで自分のニュースフィードを見るだけで受け入れなければならないのであれば、これは本当に面倒です。

投稿されたページを更新するたびに、ユーザーは再びログインします。監査ログが有効になっている場合、ニュースフィードを更新する必要があるため「ログイン」レコードが読み込まれます。あなたのサイトが各ユーザのログイン時に何かをしたとしたら(例えば、メールを送り出す)、想像してみてください。ダッシュボードページを更新するだけで毎回メールが送信されます。


もう一つの理由は、認証されていないユーザーが制限されたページにアクセスしようとしたときのサイトの多くは、リダイレクトURLを提供することです。ログイン後、サイトは、ユーザーが最初に要求したページにユーザーをリダイレクトします。ログインのためのPost-Redirect-Getはこれをより簡単にします(一般的なログインのために既に実装している場合は、この機能を持たせるための努力はあまりありません)。

他にもさまざまな理由がありますが、私にとって最大のものは、フォームが再送信されないということです。ログインには関係しませんが、Post-Redirect-Getメソッドを実装していない私のサイトに「Test SMS」機能がありました。誰かが1つのテストメッセージを送信して、リフレッシュを押し続けました。数分以内に私のSMSクレジットはすべて使い切られました。はい、その人はちょうど押さえて再送信することができましたが、リフレッシュは簡単です。

+0

よく考えていただきありがとうございます。非常に高く評価。 – jmcdev

0

さまざまな理由があると確信していますが、ログインを処理した後にユーザーを新しいランディングページに転送するのは、自分のページに関連する機能のみが含まれるようにするためです。ログインを扱うページは、通常、ホームページを表示することに関係している必要があります。通常は、ある場所や別の場所からデータを取得する必要があります。それは、その機能を分離するべきではありません。

関連性のない機能をアプリケーションの同じページに貼り付けようとすると、すぐに問題が発生するようになりますが、まもなくメンテナンスが難しいスパゲッティコードが表示されます。

-1

@jmcdev:特別な理由はありません。必要に応じて、同じログインページにユーザーを残すことができます。通常、ログインページに表示されないオプションは、保護されるため、ユーザーがリンク先ページにリダイレクトされます。

たとえば、チェックアウトを行う準備ができたときにユーザーが認証を受けるだけで、個人情報を取得することができます。

0

これは、ユーザーが潜在的にページを再読み込みすることを防止し、フォームデータを再送信する可能性があるためです。

ユーザーは、戻ってポストを戻して再送信することができます。唯一の理由は、ページの目的を分離することです。ログインページはあなただけをログインさせ、その他はログインしません。

1

これらの回答は、サーバー側の実装に大きく依存しているようです。結局のところ、ブラウザのリダイレクトをせずに、別のJSPやASPXなどからのリンク先ページや、POSTリクエストに応じたものをユーザーに返すことができます。

私はブラウザをリダイレクトすると、次のような利点があると考えてい

  • は、あなたが「ログインしていません」処理する方法と組み合わせること淫乱ダイアログなしでリロードやブックマークと戻るボタンを許可または
  • を再ポスト - 行きますログインページに移動し、ユーザーが最初に要求したページにリダイレクトさせます。これにより、ブックマーク、ディープリンク、リンクの共有によるコラボレーションが可能になります。

これは、コメント投稿やこのようなサイトのようなもので、これ以上のことです。私は、私のブラウザを使わずに新しい情報を見るためにコメントページをリロードすることができます。また、コメントの複製を提出することを理解していないユーザーはいません。

ログインに副作用がある場合は、不要なログインを避ける必要があります。

+1

最後の文に追加するには、通常、POST要求は* actions *(ログインは一例)です。あなたのアクションが冪等である場合、重複しても悪い兆候はないかもしれませんが、アプリケーションの正しい動作は、ユーザーがUIを介してアクションを指示したときにのみアクションを取ることです。彼らがページをリフレッシュしようとしているときではありません。 (+1 btw) – grossvogel

+0

よく考えていただきありがとうございます。非常に高く評価。 – jmcdev

関連する問題