0

簡単な質問ですが、私はこれを自分で理解しようとしましたが、セッション変数の使用は、ページがリロードされている理由または方法を理解しようとし、本来の動作を実行/実行しない場合に混乱する可能性があります。

ページのリロード(JavaScript、f5、ctrl + f5、ブラウザのリロードボタンなど)は、(スクリプト化されていない)状況下でフォームの再投稿を引き起こしますか?

(これは、以下のサンプルコードのようにC#コード内でIfPostブランチを使用することに関係します):

if(IsPost)
{
    //stuff that only executes if the previous request was a post.
}

セッション状態の問題を適切に診断できるように、ここで何を期待するかを知る必要があります。

助けてくれてありがとう!

(また、この質問を単純化しすぎている場合は申し訳ありません。単純な答えが提供できるよりも複雑である可能性があることを認識しています)。

** * ** * UPDATE * ** * ** * ** * また、StackOverflowでこの質問のコピーを探しましたが、何も表示されなかったため、これが重複する質問である場合は、お詫び申し上げます。

ここでの答えは両方とも良い答えです。私は自分の質問に対する解決策も提供する答えを受け入れました。PRGはそれを行うための「唯一の」方法ではありませんが、それが最善のようです。それはまた、クライアント側の使いやすさを処理するための成長している方法のようであり、imhoは、それが入るのに素晴らしい習慣になるようです。

それを見せてくれてありがとう!

4

3 に答える 3

5

はい。ページがPOSTデータを使用してロードされた場合、これが発生します。これを防ぐには、POST/REDIRECT/GETパターンを実装する必要があります。

Post / Redirect / Get(PRG)は、一部の重複フォーム送信を防止するWeb開発デザインパターンであり、ユーザーエージェント(ユーザー)にとってより直感的なインターフェイスを作成します。PRGは、重複するフォーム送信を作成しない予測可能な方法でブックマークと更新ボタンをサポートします。

于 2012-12-14T18:00:13.680 に答える
2

はい。誰かがブラウザを手動で更新すると、フォームデータを再度送信するかどうかを尋ねられます。これにより、そのコードが実行されます。

于 2012-12-14T17:59:30.133 に答える
0

これを処理する方法は、トークンを使用することです。

  1. 投稿データと一緒にランダムな文字列を送信します
  2. このランダムな文字列をどこかに保存します
  3. 投稿データを確認するときは、保存されている文字列が投稿リクエストの文字列と同じであることを確認してください。
  4. trueの場合、リクエストを処理します。
  5. 新しいトークンを生成する

誰かが投稿データを更新して再送信した場合、手順5で新しいトークンを生成したため、投稿リクエストのトークンは個別に保存したトークンとは異なります。

于 2016-01-05T13:03:29.910 に答える