新しいセッションの最初のフォーム送信でビューステートの検証に失敗しました

エラストル

ASP.NET 4.5.2で実行されているWebサイトがあり、新しいセッションの最初のフォーム送信時に、特にそのフォーム送信がサイトでの最初のポストバックである場合にのみ、以下のビューステートエラーがスローされます。ブラウザを閉じて新しいセッションを開始するまで、その後のフォーム送信は問題ないようです。また、最初にサイトの他の場所に移動してからフォームに移動した場合も発生しません。最初からフォームに直接移動する(つまり、サインインページに直接移動する)場合のみです。

Event code: 4009 
Event message: Viewstate verification failed. Reason: The viewstate supplied failed integrity check. 
Is authenticated: False 
Authentication Type: Forms 
Thread account name: IIS APPPOOL\.NET v4.5 
Exception message: Invalid viewstate.

これはEdgeとChromeで報告/実証されていますが、FirefoxやInternetExplorerでは報告されていません。

編集:サイトの最初の閲覧時に、EdgeとChromeにASP.NET_SessionIDセッションCookieがないことを特定できたことがわかりました。ポストバック後、セッションIDがCookieに表示され、フォームが再び機能します。これはFirefoxでは発生しません。Firefoxには最初のページの読み込みからの.NETセッションIDがあります。このセッションIDはViewStateUserKeyとして使用されており、これはおそらくエラーの方法を説明していますが、理由は説明していません。ポストバックが完了するまでChromeにセッションIDがないのはなぜですか?

私はすでにこのエラーで見つけることができるインターネット上のすべてを読んだので、私が見た他の提案に基づいていくつかのことに注意しましょう:

  • Web構成ファイルにマシンキーを追加しても役に立ちませんすでに試しました。また、このサイトはサーバーファーム上になく、単一のWebサーバー上で実行されています。
  • サーバーのアプリプールのリサイクルまたはメモリ制限が関係している可能性があるという提案を見てきましたが、問題のサーバーはそのリソースの制限の近くで実行されておらず、エラーは一貫して再現できます。アプリプールイベントやメモリの問題に関連している場合は、もっと散発的になると思います。

関連する場合のその他の情報:

  • サーバーはWindowsServer 2012R2でIIS8を実行しています
  • Web構成の認証設定は <authentication mode="Forms"><forms name="XXXXXXXXXX" loginUrl="SignIn.aspx" timeout="525600" /></authentication>
  • Web構成のセッション状態は <sessionState mode="InProc" cookieless="false" timeout="20" />

どんなアイデアでも大歓迎です!

編集:誰かがフォームがどのように提出されるかについて尋ねました。これは、giftcard.aspxでエラーを再現できるフォームページの1つからのフォームコードのサンプルです。

<form name="aspnetForm" method="post" action="./giftcard.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/[gibberish]" />
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
<script src="/WebResource.axd?[gibberish]" type="text/javascript"></script>
<script src="jscripts/formvalidate.js" type="text/javascript"></script>
<script src="jscripts/core.js" type="text/javascript"></script>
<script src="/ScriptResource.axd?[gibberish]" type="text/javascript"></script>
<script src="/ScriptResource.axd?[gibberish]" type="text/javascript"></script>
<script src="/ScriptResource.axd?[gibberish]" type="text/javascript"></script>
<script src="/WebResource.axd?[gibberish]" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</script>

以下のように、送信にasp:Buttonコントロールを使用しています。

<asp:Button ID="btnContinue" CssClass="btn-primary btn-GCcontinue" runat="server" Text="Continue" OnClick="btnContinue_Click" />

この例は、サイトの典型的なフォームです。

エラストル

答えはSamesiteCookieに関連していることが判明しました。最近、Chromeの同じサイトの変更に関連していると思われる支払い処理の問題を修正するために、samesite = noneを使用するようにセッションIDCookieを更新しました。それを行ったとき、Secureも指定する必要があることに気づかず、Secureの欠如がどのように観察された特定の動作につながったかはまだわかりませんが、使用するセッションCookieを更新SameSite=None; Secure;すると修正されたようですこれで、Chromeは最初のリクエストからASP.NET_SessionIdを認識します。

ちなみに、.NETのバージョンは非常に古いため、ここで見つけたアプリ構成の書き換えを使用していますhttps://www.coderfrontline.com/chromes-samesite-cookie-changes-are-breaking-apps /もう一度見てみると、Secureを使用するように完全に書かれていますが、その時点では気づかなかったので、サンプルをそのままコピーしました。したがって、HTTPSを使用している場合は、必ずSecureを追加してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

ASP.netビューステートMACの検証に失敗しました。このアプリケーションがWebファームまたはクラスターによってホストされている場合

「Zend \ Authentication \ AuthenticationService」という名前のサービスを作成できませんでした。理由:セッションの検証に失敗しました

djangoでフォームの検証に失敗しました

新しい値で更新するときに検証が失敗した後、フォームの入力フィールドをリセットする方法

単体テストフォームの日時フィールドの検証に失敗しました

単体テストフォームの日時フィールドの検証に失敗しました

システムクラッシュ後、セッション「gnome」のロードに失敗しました

パセリフォームは、最初の送信時に常に検証に失敗します

Xamarinクロスプラットフォームアプリソリューションのビルドに失敗しましたか?

reCaptcha V3は、最初のフォーム送信でのみ検証に失敗します

PHP フォームの検証に失敗しました

Facebook SDKがエラーを返しました:クロスサイトリクエストフォージェリの検証に失敗しました。URLとセッションの「状態」パラメーターが一致しません

検証に失敗した場合、フォームの送信をブロックできません

Spring MVCでアノテーションベースの検証を行うフォームBeanのユニットテストに適したパターン

Android Espresso UIテスト----テストの実行に失敗しました:「プロセスがクラッシュしました」が原因でインストルメンテーションの実行に失敗しました。

検証が失敗した場合、フォームの送信を停止します。

Azure-プッシュ通知-テストメッセージの送信に失敗しました

System.Web.HttpException:ビューステートMACの検証がASP.NETで失敗しました

symfonyフォームセッションの開始に失敗しました:すでにPHPによって開始されています

Reactルーターでのナビゲーションテストに失敗しました

アクセストークンの検証に失敗しましたMicrosoftGraph API

最初の検証に失敗したメッセージが表示されているページの一部までスクロールします

フォーム検証のポップアップが失敗しました

「プロセスがクラッシュした」ため、インストルメンテーションの実行に失敗しました。

Laravel5のフォーム変更リクエストが検証動作に失敗しました

キャプチャフォームを使用したメザニンでのCSRFトークンの検証に失敗しました

検証が失敗した場合、ajaxでのフォーム送信を停止します

ユーザーが 30 分以上ポストバックしない場合の「ビューステート MAC の検証に失敗しました」エラーを防ぐにはどうすればよいですか?

Flask-WTFフォームの検証に失敗しました

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ