これはしばらく問題はありましたが、非常に散発的で、分離が困難です。ポストバックとリダイレクト後にHttpCookieが認証時に失われることがありました。
時々、ウェブアプリケーションで認証されたブラウザがしばらく開いていて、同じウェブアプリケーションに何度もログインしたり、複数のタブを持ったり、ほとんどすべてのブラウザ(Chrome、 IE、Firefox、Safari)、一見無作為に設定された後にAuthCookieを保持する能力を失い、その後リダイレクトされます。ブラウザを閉じて新しいセッションを開始すると、別のブラウザを開いて認証を試みるように、問題が解決されます。
私たちのチームは、すべてのWebサイトとWebアプリケーションに対してフォーム認証を使用しています。これは、ログインフォームが表示され、ユーザーが資格情報を入力し、ポストバックのクリックイベントでCookieが設定された後、Cookieが参照されて認証を完了するために使用される同じページにリダイレクトされます。リダイレクト後
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オン:この状況イベント内
FormsAuthentication.FormsCookieName = ".WebAuth"
で
この時点で
HttpCookie authCookie = Request.Cookies[cookieName];
は、なAuthCookie変数は、典型的にはnullでありません上記で概説したこれらの分離された状況では、リダイレクト後にクッキーがnullに戻ります。
これは非常にランダムに発生することがあります。開発者の1人に影響を与えるまでに数週間かかる場合もあります。私が言ったように、ブラウザを再起動すると問題が解決されます。
今日私はChromeを使用している間、私たちのdevサーバー上で発生しました。私はアプリケーションにログインし、アプリケーションにセッションタイムアウトを許可した後、再度ログインしようとしました。試行されたログインは、Cookieの設定に失敗しました。 Visual Studioをサーバー上のプロセスにリモートで接続してデバッグを開始しました。新しいコードバージョンをアップデートしてサーバーに展開し、アプリケーションを再起動し、サーバー上でIISを再起動し、プロジェクトにアタッチして再接続すると、Chromeで問題が解決されました。 Firefoxでは、問題なく認証できました。
Chromeから、ログインが検証され、上記のように応答Cookieを設定しようとします。リダイレクトする前に、適切に設定されたResponse CookieとRequest Cookieの対応するCookieを確認できました。しかし、一見成功したログイン後のリダイレクトごとに、レスポンスとリクエストクッキーはなくなりました。
私はクッキーのコレクションを表示するには、アプリケーション上でトレースを有効に:
.WebAuthが要求クッキーのコレクションだけでなく、ASP.NET_SessionIdと、いくつかのASPSESSIONIDxxxxxxxxが、ページのロード時、唯一のASPであります.NET_SessionIdおよびASPSESSIONIDxxxxxxxxクッキーはRequest.Cookiesスコープで使用でき、.WebAuthの符号はありません。しかし、レンダリング後のページのトレース情報には、複数の.WebAuthクッキーがリストされていますが、ページにアクセスできないように見えるだけです。
主に、認証後の作業バージョンでは、ページのトレース情報に.WebAuth ResponseとRequest Cookieの両方があります。しかし、機能していないブラウザウィンドウでは、レスポンスCookieは存在しません。
他に誰もこの経験がありますか?それはそんなに問題があり、散発的ですが、私はそれを解決することが大好きです。私の懸念は、それがユーザーに影響を与えている可能性があり、問題の説明がそんなに複雑であるため、私たちは何の知識も持たないということです。
は、開発環境でこれを遭遇したことがありますか?それとも、プロダクションでのみ?いくつのサーバーが関与していますか?私はロードバランサの問題のためにクッキーが「失われている」と似たようなことに遭遇したので尋ねます。 – ThatBlairGuy
これは、プロダクション、ステージング、および開発で発生します。私たちのチームのすべての開発者は、時々、ブラウザごとに、また一度に1つのブラウザでしか発生しませんでした。開発とステージングは負荷分散されていませんが、生産はロードバランサの背後にあるファームにあります。すべてのマシンキーが一致します。上記の質問で参照された事件は、私たちのステージング環境にありました。 –
それは今日、そして過去に起こった。 Fiddlerを使用して、私はブラウザにまだ古い「.ASPXAUTH」クッキーが残っていることがわかりました。 Response.Cookies.Add()を使用して新しいものを追加すると、.ASPXAUTHという名前の2つのCookie(Request.Headersに表示される)が存在し、Request.Cookiesはそれらを無視します。まだ、この二重のクッキーが最初にそこにいかにあったかを理解していませんが、ブラウザを再起動することでそれをクリアするのに役立ちます。ああ、Response.Cookies.Addの代わりにResponse.Cookies.Setを使用しても役に立ちません。あなたがこれに再び遭遇した場合は、私に知らせてください:-) – Razzie