これはしばらくの間、しつこい問題でしたが、非常に散発的であり、特定するのは困難です。
時々、Web アプリケーションで認証されたブラウザー、しばらく開いていたブラウザー、同じ Web アプリケーションに何度もログインおよびログアウトしたブラウザー、複数のタブを持つブラウザー、ほとんどすべてのブラウザー (Chrome、IE、Firefox、 Safari) であり、一見無作為に、AuthCookie が設定され、その後にリダイレクトが行われた後、保持する機能を失います。ブラウザを閉じて新しいセッションを開始するか、別のブラウザを開いて認証を試みると、問題が解決します。
私たちのチームは、すべての Web サイトと Web アプリケーションでフォーム認証を使用しています。これは、ログイン フォームが表示され、ユーザーが資格情報を入力し、ポストバックのクリック イベントで Cookie が設定される、非常に典型的なセットアップです。その後、Cookie が参照され、認証を完了するために使用される同じページへのリダイレクトが発生します。
この状況では
FormsAuthentication.FormsCookieName = ".WebAuth"
イベント内:
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, Username, DateTime.Now, DateTime.Now.AddMinutes(SessionTimeout), false, Username);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(faCookie);
Response.Redirect(Request.RawUrl, true);
リダイレクト後、PreInit で:
HttpCookie authCookie = Request.Cookies[cookieName];
この時点で、通常、authCookie 変数は null ではありませんが、上記で概説したこれらの孤立した状況では、Cookie はリダイレクト後に null に戻ります。
これは非常にランダムに発生し、開発者の 1 人に影響が及ぶ数週間前に発生することもあります。先ほど言ったように、ブラウザを再起動すると問題が解決します。
今日、Chrome を使用しているときに開発サーバーで発生しました。アプリケーションにログインし、アプリケーションのセッション タイムアウトを許可してから、再度ログインを試みました。ログインの試行は、Cookie の設定に失敗しました。サーバー上のプロセスに Visual Studio をリモート接続して、デバッグを開始しました。コードをステップ実行し、新しいコード バージョンを更新してサーバーに展開し、アプリを再起動し、サーバーで IIS を再起動し、プロジェクトにアタッチして再アタッチし、問題が Chrome で持続することさえできました。Firefox では、問題なく認証できました。
Chrome から、ログインが検証され、上記のように応答 Cookie の設定が試行されます。リダイレクトする前に、適切に設定された応答 Cookie と、対応する要求 Cookie を確認できました。ただし、一見成功したように見えるログイン後の各リダイレクトでは、応答 Cookie と要求 Cookie は失われています。
アプリケーションで Trace を有効にして、Cookie コレクションを表示しました。
Request Cookies Collection には、ASP.NET_SessionId といくつかの ASPSESSIONIDxxxxxxxx だけでなく、.WebAuth がありますが、ページが読み込まれると、ASP.NET_SessionId と ASPSESSIONIDxxxxxxxx の Cookie のみが Request.Cookies スコープで利用可能になり、.WebAuth の兆候はありません。 . ただし、レンダリング後のページのトレース情報には、複数の .WebAuth Cookie がリストされています。ページがそれらにアクセスできないように見えるだけです。
主に、認証後の作業バージョンでは、ページのトレース情報に .WebAuth レスポンスとリクエスト Cookie の両方があります。しかし、機能していないブラウザー ウィンドウでは、応答 Cookie は存在しません。
他の誰かがこれを経験したことがありますか?それは非常に厄介な問題であり、散発的ですが、解決できることを楽しみにしています. 私の懸念は、ユーザーに影響を与えている可能性があり、問題の説明が非常に複雑であるため、私たちにはわからないことです.