2
  • Asp.Net MVC 3
  • FormsAuthentication (カスタム)
  • iPad モバイルSafari
  • iframe (同一ドメイン)

MobileSafariformsTicket.UserData (MoblieSafariのみ)で動作しないことに苦労した後、それがであり(MobileSafariでは他のものではなく)、元のFormsAuthentication HttpCookie正しい値が含まれていることがわかりました?!?httpContext.User.Identity.Ticket.UserData

それはどうしてですか?

コード:

public void UpdateContext()
{
    if (httpContext.User.Identity is FormsIdentity)
    {
        // Get Forms Identity From Current User
        FormsIdentity id = (FormsIdentity)httpContext.User.Identity;
        // Create a custom Principal Instance and assign to Current User (with caching)
        HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

        var cookieUserData = ticket.UserData; // not empty
        var httpContextIdentiyUserData = id.Ticket.UserData; // empty!
        ...
    }
}

どんな手がかりも役に立ちます!

ラグワラッパー
_

PS: 問題があれば、同じドメインの iframe で自分の Web サイトのページを使用しています。

4

1 に答える 1

2

したがって、問題は次のとおりです。
このエラーは、ログアウトしてhistory.back().

私が見た Fiddler のトラフィックを見ると、Asp.Net はcookieless authentication modeを使用していたため、認証はurl にエンコードされていました。さて、これが発生したとき、 URLは現在無効な認証情報を含むログアウト URL をhistory.back()指していました...私の側の厄介なバグです。

Asp.Net に強制的に Cookie を使用させるとうまくいきました。

ラグワラッパー
_

于 2011-05-20T08:33:48.460 に答える