3

이 작업은 정말 짜증나는 문제이며 해결하기 위해 어디에서 시작해야할지 모르겠습니다.MVC 4 크롬 사용자가 두 번 로그인해야합니다.

코드를 로컬에서 실행할 때이 문제가 발생하지 않습니다.이 문제는 실제 환경에서만 실행됩니다. 나는 내가 뭔가를 놓치고 있다는 것을 압니다. 아마도 그 명백한 것만 알면됩니다.

난 MVC 4 응용 프로그램을 가지고 있는데 여기에서 MembershipProvider를 재정의했다. 나는 이것이 로그인이 작동하는 것처럼 이것이 문제가 아니라고 확신한다. 로그인은 IE, Firefox, Safari에서 작동하지만 Chrome 데스크톱 (Windows 7) 및 Chrome IOS (Ipad에서)에서는 실패합니다.

Chrome에서 사용자는 두 번 로그인해야합니다. 첫 번째 시도에서 쿠키의 ASPXAUTH 요소가 설정되지 않습니다. 하지만 두 번째 시도에서 설정됩니다. (Fiddler에서 검토 됨)

나는이 주변을 둘러 보았고이 제안을 발견했지만 구현했지만 여전히 문제가 있습니다.

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

내가보고 시작하는 아무 생각이 없다 (I 4.5 내가이 매우 긴 총을 알고 있었다 그래서 설치 한) (이 완전히 상세 내 문제가되지 않습니다하지만 가까이) 이 문제를 해결하십시오. 다음은 쿠키를 만드는 코드입니다. 쿠키가 나는 우리가 코멘트에서 생각으로이 문제

+0

이 문제를 몇 가지 추가 메모와 함께 확인할 수 있습니다. 1) Chrome을 사용하는 모든 iOS 기기에서 문제가되는 것 같습니다. 2) HTTPS와 관련이없는 것 같습니다. 내 구성에서 문제가 발생했습니다. 3) 제 감사 기록에 불구하고 성공적으로 로그인 했음에도 불구하고 쿠키를 설정하지 않았습니다. – HackedByChinese

+0

HackedByChinese 안녕하세요, Windows 버전의 Chrome에서이 동작이 표시됩니까? – KevDevMan

+0

사과드립니다. iOS Chrome에 쿠키 티켓을 강제로 보내는 것에 관한 부분을 놓쳤습니다. 일단 내가 그렇게하면, 그것은 잘 동작했다. 한 가지는 쿠키를 설정할 때 잠재적으로 중요한 정보를 생략한다는 것입니다. 나는 인증 쿠키를 설정할 때, 나는 이런 식으로 작업을 수행합니다 'VAR 쿠키 = 새로운 끊어진 HttpCookie (FormsAuthentication.FormsCookieName, ticketString) { 안전 = FormsAuthentication.RequireSSL, 경로 = FormsAuthentication.FormsCookiePath, Http 만 = 사실, 을 Domain = FormsAuthentication.CookieDomain }; ' – HackedByChinese

답변

1

의 원인이되는 경우 HTTPS에서 전체 사이트를 실행하고 있습니다

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

리디렉션을 만든 후

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); 
    } 

리디렉션시 쿠키가 전달되지 않고 다음과 같이 쿠키를 생성하여 해결되었습니다.

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

Response.Cookies.Add(authCookie);