2

基本的に、私が構築しているこのサイトのすべてのページは、ユーザーがブラウザーで [戻る] (またはキー コントロール) をクリックするとアクセスできず、履歴をさかのぼろうとするとページが期限切れになります。

私は Global.asax::Application_BeginRequest に入れました

    Response.Cache.SetCacheability(HttpCacheability.NoCache)
    Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1))
    Response.Cache.SetValidUntilExpires(False)
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches)
    Response.Cache.SetNoStore()

これにより、キャッシュがクリアされ、ユーザーがログアウトしているときにページに戻ることができなくなりますが、ユーザーがログインしている間はジョブを実行しません.

私は、JavaScript のアプローチを使用することを人々が提案した投稿を見ました。

    History.Forward(1)

ページで。しかし、これを行うにはJavaScriptを有効にする必要があるため(ユーザーは無効にできます)、これを行いたくありません。

提案をお待ちしております。

4

2 に答える 2

4

これを一貫して実行できる唯一の方法は、 を使用している場合ですhttps。そうでない場合、キャッシュされたページを使用しないようにブラウザを強制する方法はありません。あなたが言及したハックがありますが、完全な証拠ではありません。本当に重要な場合は、httpsリクエストごとにリロードが強制されるため、使用してください。

于 2010-03-17T16:27:02.620 に答える
0

調査と試行に多くの時間を費やした後、回避策を実装し、他の誰かが役立つ場合に備えて共有することにしました. この (解決策に最も近いが、Firefox の例外のみ) 回避策により、次のことが発生します。

  1. IE6-8:「ページの有効期限が切れました」が表示される
  2. Chrome:「フォーム再送信の確認」が表示される
  3. Firefox:投稿データの再送信を求めるダイアログ ボックスが表示される

回避策:

  1. 上に投稿された元の問題にリストされている Response.Cache 設定を使用
  2. サイト内の別のページへのすべてのハイパーリンクを LinkBut​​ton に変更します。
  3. をリンクの href URL に設定しPostBackURLます。LinkButtonこれが必要なのは、設定したヘッダーと共に POST を使用した場合にのみ、ブラウザーが履歴内の最初に投稿されたページを期限切れにし、再送信を要求するためです。
  4. コード ビハインドで Response.Redirect を使用する代わりに、別のページへの GET を使用するServer.Transferように を使用します。Response.Redirect

このソリューションは、ユーザーが履歴のページに戻ることを禁止するのではなく、データをもう一度投稿するかどうかを確認します。元の投稿で述べたように、これHistory.Forward(1)はうまく機能しません。また、警告なしでページに自動的に再投稿され、本質的に複数のリクエストがサーバーに送信される可能性があることも認識しています。

主なアイデアは、GET の代わりにすべてのページに POST することです。そのため、サイトにアクセスしたすべてのページは、戻るときに Page Expired ページになります。これで、ユーザーはいつでも更新してデータを再投稿できます。

于 2010-03-29T13:41:01.980 に答える