ブラウザの履歴からページを削除するにはどうすればよいですか?
-
08-07-2019 - |
質問
ボタンを含むASP.Netページがあります。このページには、ServerSide Paypalボタンが含まれています。
サーバーがプッシュされると、バックエンドでさまざまな巧妙な処理が行われ、応答がフォームおよびこのフォームをpaypalに投稿するJavaScriptとして書き換えられます。
これはすべてうまくいきます。
ただし、ユーザーがクリックバックを選択した場合、生成された自己投稿フォームに到達し、Paypalに再度転送されます。
生成されたフォームページが履歴に存在しないようにする方法を見つけることができれば、これで問題が解決するだろうと考えました。しかし、私はこれを修正する方法がわかりません。
履歴からページを削除したり、表示されないようにするにはどうすればよいですか
更新:すべてに感謝します...これらは素晴らしい答えです。すべての良いものを支持しましたが、決定に基づいてCookieではなく隠しフィールドを巧妙に使用したため、スプラットと一緒に行きました。
解決
それができるかどうかわかりません。ただし、フォームの再送信を防ぐ方法は次のとおりです。
フォームに隠し入力を挿入すると、最初は空になります。送信時に、そのフィールドに値を書き込み、このフィールドが空の場合は、すべての送信試行を確認します。
送信時に空でない場合は、フォームが以前に送信されたことがわかり、ユーザーに警告することができます。
他のヒント
window.location.replace(URL);
replace(url)
現在のドキュメントを 提供されたURLに1つ。の assign()メソッドとの違いは replace()を使用した後、現在の ページはセッションに保存されません 履歴、つまりユーザーは 戻るボタンを使用して それに移動します。
Webアプリケーションとして、ユーザーのブラウザを完全に制御することはできません。ページを履歴に保存しないようにブラウザに指示する方法があったとしても、それが機能するかどうかはわかりません。たとえば、賢いユーザーは、オープンソースのブラウザーを微調整して、どのページでも履歴にあるすべてのページを保存できます。
別の角度から問題にアプローチする必要があると思います。たとえば、転送されているフォームと同じフォームであることを検出し、2回目にpaypalに送信することはできません。重要なことは、サーバー側で行うことです。
おそらく、フォームを送信する前にCookieを設定できます。
ページが読み込まれたら、そのCookieの存在を確認します(フォームが既に送信されていることを意味します)。見つかった場合は、フォームを自動的に送信する代わりに、自動的に戻ります( window.history.back()
)再び。
PayPal統合でこれを簡単に行えるかどうかはわかりませんが、 " Post / Redirect / Get" パターンを使用して、この問題に対処できます。
一部の人にとって有用なヒントはこれかもしれません...
window.history.go(-2);
特に、ロード障害警告ポップアップの出現。
window.refererが2回目の呼び出しを避けようとしているPaypalページである場合、送信しないように、または何かを行う/他の場所にナビゲートするようにページを単純にプログラムできます。