10

最近、会社の eComm サイトのログインを変更して、「ログイン状態を維持する」機能を追加しました。主な変更点は、フォーム認証 Cookie をこれらのユーザーに対して永続的にすることでした。

変更がリリースされた後、ログに次の例外が表示されるようになりました。

Invalid value for 'encryptedTicket' parameter
at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)

問題はユーザー エージェント固有のようです。エラーが記録されている唯一のユーザー エージェントは次のとおりです。

  • Mozilla/5.0 (iPad; U; Mac OS X のような CPU OS 4_3_3; en-us) AppleWebKit/533.17.9 (Gecko のような KHTML) バージョン/5.0.2 Mobile/8J2 Safari/6533.18.5

  • eTailInsights タグ識別子/1.0

上記の構成のiPadがあります。最初のログイン試行は機能します。ただし、ブラウザを閉じてサイトに戻ると、永続的な Cookie が使用され、エラーが発生します。

また、動作は環境間で一貫性がありません。ローカル マシンとテスト サーバーに対しては正常に動作しますが、運用環境では失敗します。これにより、トラブルシューティングが困難になります。

他のバージョンの iOS/Safari では問題なくログインできます。

このエラーを検索すると、Web フォームと新しいブラウザー バージョンの問題への言及がいくつか見つかりました。ただし、これは私のシナリオと一致していないようです。新しいブラウザーでエラーが表示されず、私のサイトは MVC です。

私の質問に似た質問が 1 つ見つかりましたが、回答がありませんでした。

ここで何が起こっているか知っている人はいますか?

4

4 に答える 4

10

authCookieValue の null または空の値を取得していたため、同じ問題に直面しました。したがって、私の提案は、 HttpCookie の null と、以下に示す値の null を確認する必要があることです。

HttpCookie authCookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            //Extract the forms authentication cookie
            if (!string.IsNullOrEmpty(authCookie.Value))
            {
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

                string email = authTicket.UserData;

                // and now process your code as per your condition

            }
        }

これは間違いなくあなたを助けるでしょう。

于 2014-07-19T05:57:19.993 に答える
2

これは、無効な文字列を に渡した場合に発生しますSystem.Web.Security.FormsAuthentication.DecryptcookieName最も一般的には、代わりにを渡そうとしcookieValueます。

以下は、ASPXAUTH Cookie 値 + 情報を取得する方法です。

string authCookieValue = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName].Value;
var cookieInfo = System.Web.Security.FormsAuthentication.Decrypt(authCookieValue);
于 2014-03-10T22:40:57.947 に答える
1

私が見つけたのは、何らかの理由で Cookie が一貫性のない値を取得できることです。私たちにとっては、状況によっては、一部のユーザーだけでした。

エラーを発生させるよりも、引数の例外が発生した場合にユーザーをログアウトすることを提案するだけです。それは「理由」を説明しておらず、完全に満足できるものではありません (ある意味で、「私を記憶する」が機能しないユーザーもいます...)。

global.asax で:

 protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
    {
        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

        if (authCookie != null)
        {
            try
            {
                var authTicket = FormsAuthentication.Decrypt(authCookie.Value);

                //...
                //setting user properties with cookie...
                //...
            }
            catch (ArgumentException ex)
            {
                FormsAuthentication.SignOut();
                Response.Redirect("/");
            }
        }
    }

リダイレクトが必要かどうかさえわかりません(確認する必要があります)。

お役に立てれば

于 2015-08-27T14:08:41.067 に答える