17

次のシナリオを検討してください。

  1. ASP.NET を使用して構築された Web サイトのページにアクセスしました。このページは、ASP.NET サーバー コントロールを含む単純な aspx ページです。

  2. 同じ Web サイトの別のページに移動するリンクをクリックしました。

  3. BACKブラウザのボタンをクリックしました。

質問: ページのライフサイクルに関してはどうなりますか? すべてのイベントが発生しますか、それともブラウザはリクエストを行わずにページのキャッシュされたバージョンを表示するだけですか?

4

4 に答える 4

16

最良の答えは次のとおりだと思います。特にポスト/ポストバックの後は、ブラウザによって異なります。

古いブラウザでは、「再送信される POST データがページに含まれています」という旨の確認ダイアログが表示され、続行 (再送信) するかキャンセルすることができました。ASP.NET WebForms で発生することはすべてFORM要素 (ViewState、イベントなど) の一部であるため、ライフサイクル全体が繰り返されることになります。

もちろん、これにより重複送信の問題が後を絶ちませんでした。そのため、多くのサイトは重複問題の回避策を考え出す必要があり、今日ではほとんどのブラウザーが代わりにキャッシュからページをフェッチするだけです。

...これは、キャッシュ制御ヘッダーをオーバーライドして、ブラウザがページをキャッシュに保存しないように強制しない限りです。明らかに、その場合、キャッシュから取得することはできないため、通常は再送信されることになります。ただし、これもブラウザによって異なります。たとえば、一部のブラウザでは SSL 経由での再送信が許可されないため、使用中のプロトコルが SSL である場合、ユーザーには、ページの有効期限が切れていることを示すメッセージが表示されます。示す。

考えてみると、おそらくもっと良い答えは次のとおりです。サイト デザイナーとして、[戻る] ボタンがクリックされたときのユーザーのブラウザーからの特定の動作に依存することはできません。重複した送信によってマイナスの副作用 (クレジット カードへの請求が 2 回行われるなど) が発生する可能性がある場合は、それが起こらないように適切な対策を講じる必要があります。ユーザーが誤って「送信」ボタンを単純にダブルクリックしてしまう可能性は十分にあるため、とにかくこれは良い習慣です。

于 2010-02-01T08:01:15.407 に答える
1

私たちも試しました

Response.ExpiresAbsolute = DateTime.Parse("1/1/1980");
Response.AddHeader("cache-control", "no-store, must-revalidate, private");
Response.AddHeader("Pragma", "no-cache");

このような問題を解決するために

于 2010-02-01T08:23:41.473 に答える
0

通常はすべてのイベントが発生するはずですが、キャッシュされたページを表示する可能性がある超ブラウザを使用している場合は、ページの読み込みにブレークポイントを設定して、それが発生するかどうかを確認できます。

于 2010-02-01T07:43:08.460 に答える
0

ページはキャッシュから表示されます。

于 2010-02-01T07:51:54.073 に答える