3

これは本当に厄介な問題であり、解決するためにどこから始めればよいかわかりません。

この問題は、コードをローカルで実行した場合には発生せず、ライブ環境で実行した場合にのみ発生します。私は何かが欠けていることを知っています、そしておそらくそれを理解することができるのは明らかです。

さて、MembershipProvider をオーバーライドした MVC 4 アプリケーションがあります。ログインは機能するため、これは問題ではないと確信しています。ログインは IE、Firefox、Safari では機能しますが、Chrome デスクトップ (Windows 7)、および Chrome IOS (Ipad) では失敗します。

Chrome では、ユーザーは 2 回ログインする必要があります。最初の試行では、Cookie の ASPXAUTH 要素が設定されていません。しかし、それは 2 回目の試行で設定されます。(Fiddler でレビュー済み)

私は周りを見回してこの提案を見つけ、それを実装しましたが、まだ問題があります。(これは私の問題を完全に詳しく説明しているわけではありませんが、近いものでした)

http://www.hanselman.com/blog/FormsAuthenticationOnASPNETSitesWithTheGoogleChromeBrowserOnIOS.aspx

(私は4.5をインストールしているので、これが非常に長いショットであることはわかっていました)

これを解決するためにどこから始めればよいかわかりません。ここに私がクッキーを作成するコードがあります。

    private void SignIn(string userName, bool RememberMe)
    {
        MyMembershipProvider provider = (MyMembershipProvider)System.Web.Security.Membership.Provider;
        MyMembershipUser user = (MyMembershipUser)provider.GetUser(userName, false);

        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
          user.UserName,
          DateTime.Now,
          DateTime.Now.AddMinutes(30),
          true,
          user.UserID.ToString(),
          FormsAuthentication.FormsCookiePath);

        // Encrypt the ticket.
        string encTicket = FormsAuthentication.Encrypt(ticket);

        // Create the cookie.
        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);

        Response.Cookies.Add(authCookie);
    }

Cookieが作成された後、リダイレクトします

    return Redirect("Https://www.sitehome.local");

これが問題を引き起こしている場合に備えて、サイト全体を HTTPS で実行していることに注意してください

4

1 に答える 1

1

コメントでわかったように、Cookieはリダイレクト時に転送されず、次の方法でCookieを作成することで修正されました。

var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticketString) 
    { 
       Secure = FormsAuthentication.RequireSSL, 
       Path = FormsAuthentication.FormsCookiePath, 
       HttpOnly = true, 
       Domain = FormsAuthentication.CookieDomain 
    };

Response.Cookies.Add(authCookie);
于 2013-01-18T14:20:40.957 に答える