12

ユーザーが戻るボタンを押したときに、ブラウザがどこにでもある「このページは期限切れです」というメッセージを表示するための要件は何ですか?

ユーザーがWebアプリの戻るボタンを使用できないようにするためのユーザーフレンドリーな方法は何ですか?

4

5 に答える 5

11

デフォルトでは、フォームPOSTを処理しているときはいつでも、ユーザーがヒットバックしてから更新すると、ブラウザがデータを再送信していることを示すメッセージが表示されます。ただし、ページがすぐに期限切れになるように設定されている場合は、更新を押す必要はなく、戻ったときにページの期限切れのメッセージが表示されます。

両方のメッセージを回避するには、次の2つのことを試してください。

1)代わりにフォームGETを使用してください。何をしているかにもよりますが、GETリクエストにはまだサイズ制限があるため、これが常に良い解決策とは限りません。そして、情報は、最も安全なオプションではないクエリ文字列で渡されます。

- また -

2)フォームPOSTの後に、サーバー側で別のページにリダイレクトします。

同様の質問がここで回答されたようです:

「Webページの有効期限が切れました」を回避するために、POST後に303でリダイレクトします。GETリクエストが処理できるバイト数よりも多い場合でも機能しますか?

3番目のオプションとして、ユーザーがブラウザーに戻るのをまったく防ぐことができます。私がこれをする必要性を感じたのは、彼らが二度支払うなどの愚かなことをしないようにすることだけでした。それを処理するためのより良いサーバー側の方法がありますが。サイトでセッションを使用している場合は、最初にチェックアウトページでキャッシュを無効にし、すぐに期限切れになるように設定することで、セッションが2回支払うのを防ぐことができます。そして、セッションに保存されているある種のフラグを利用して、ページに戻ったときに実際にページの動作を変更することができます。

于 2009-10-16T19:59:07.110 に答える
2

Page_Loadで次のコードを使用してみてください

Response.Cache.SetCacheability(HttpCacheability.Private)
于 2011-03-25T12:56:26.910 に答える
2

HTTPヘッダーでプラグマキャッシュ制御オプションを設定する必要があります: http ://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

ただし、ユーザビリティの観点から、これはこの問題への推奨されないアプローチです。他のオプションを探すことを強くお勧めします。

ps:Steveが提案したように、GETを介したリダイレクトが適切な方法です(またはJSでページの移動を確認してください)。

于 2009-10-16T19:58:56.843 に答える
1

前に次のいずれかを使用してsession_startください。

session_cache_expire(60); // in minutes 

ini_set('session.cache_limiter', 'private');

/ノート:

言語はPHPです

于 2012-02-15T07:06:07.377 に答える
0

これが標準的な方法かどうかはわかりませんが、通常、IE専用のVaryヘッダーを送信しないことでこの問題を解決します。Apacheでは、httpd.confに次のように配置できます。

BrowserMatch MSIE force-no-vary

RFCによると:

Varyフィールド値は、応答が新鮮な間に、キャッシュが再検証なしで後続の要求に応答するために応答を使用することを許可されるかどうかを完全に決定する要求ヘッダーフィールドのセットを示します。

実際の効果は、POSTに「戻る」と、IEは単に履歴キャッシュからページを取得することです。サーバー側へのリクエストは一切ありません。これはHTTPWatchではっきりとわかります。

このアプローチの潜在的な悪い副作用を聞いてみたいと思います。

于 2010-03-04T16:55:42.077 に答える