2014-01-08 4 views
0

MVC.net 응용 프로그램의 영구 로그인 작업 중입니다. FormAuthantication에서 IsPersistent = true를 사용하려고했지만 iis를 다시 시작하면 사용을 로그 아웃합니다. 아래의 코드가 담당 코드입니다. 로그인하는 중입니다.mvc.net의 영구 로그인

public void SetLoginData(UserLoginInfo userLoginInfo) 
     { 
      HttpContext .Current.Session[SessionUserEmailIdKey] = userLoginInfo.Email; 
      HttpContext.Current.Session[SessionWelcomeNameKey] = userLoginInfo.FirstName; 
      HttpContext.Current.Session[SessionWelcomeRegistrationIdKey] = userLoginInfo.RegistrationId; 

      HttpContext.Current.Session[SessionLoginInfoKey] = userLoginInfo; 
      const bool isPersistent = true; 
      const string userData = "user"; 

      var ticket = new FormsAuthenticationTicket(1, 
                 userLoginInfo.RegistrationId.ToString(
                  CultureInfo.InvariantCulture), 
                 DateTime.UtcNow, 
                 DateTime.UtcNow.AddMinutes(180), 
                 isPersistent, 
                 userData, 
                 FormsAuthentication.FormsCookiePath); 

      string encTicket = FormsAuthentication.Encrypt(ticket); 
      HttpContext.Current.Request.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 
      HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket)); 
     } 

앱을 다시 시작하더라도 사용자가 로그 아웃하지 않도록 로그인을 구현하는 방법을 알려주십시오.

답변

4

영구 로그인을 만들려면 FormsAuthentication을 사용하고 있으므로 두 가지 사항을 확인해야합니다.

우선 - 티켓 만료 시간을 확보하는 것은 (IIS를 다시 부팅 할 때 사용자가 사이트에서 쫓겨지고있는 이유와 가장 가능성이) 미래

= new FormsAuthenticationTicket(1, 
     userLoginInfo.RegistrationId.ToString(CultureInfo.InvariantCulture), 
     DateTime.UtcNow, 
     DateTime.UtcNow.AddYears(20), 
     isPersistent, 
     userData, 
     FormsAuthentication.FormsCookiePath); 

초에 언젠가 탈출구 설정된를 만드는 것입니다 정적 키 쌍이 설정된 web.config의 machineKey 섹션 기본적으로 IIS는 응용 프로그램마다 machineKey를 자동 생성합니다. 이것은 폼 인증 티켓을 암호화/해독하는 데 사용됩니다. IIS가 다시 시작되면이 인스턴스에서 새 컴퓨터 키를 얻을 가능성이 높습니다. 즉, 티켓을 해독 할 수 없으므로 사용자가 다시 로그인해야합니다. 정적 키를 생성/정의함으로써 IIS가 재활용 될 때 키 변경을 방지 할 수 있습니다. 기계 키 설정에 대한 정보는 found on MSDN here 일 수 있습니다.

마지막으로 세션 인증은 세션 및 세션 관리와 관련하여 ZERO입니다. 상호 배타적이며 일반적인 시나리오에서는 서로 영향을주지 않습니다. 사용자가 로그인하면 만료 시간과 사용자 이름을 포함하는 암호화 된 쿠키가 제공됩니다. 이것은 입니다.이 세션에 저장되어 있으므로 세션 설정을 조정해도 사용자 로그인에 영향을 미치지 않습니다.