12

이것은 MVC2 웹 사이트이며 FormsAuthentication 티켓에 문제점이 있습니다. 30 분 후 사용자 시간 초과는 다시 로그인 할 수 없습니다. 테스트하는 동안 DateTime.Now.AddMinutes (30) 값은 5000로 설정하고 모든 것을 확인했지만, 지금은 30로 변경하고 그 문제가 쿠키 만들기에서FormsAuthenticationTicket.expiration v web.config 값 시간 초과

을 시작했을 때 다음이다

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
      1, 
      user.UserID, 
      DateTime.Now, 
      DateTime.Now.AddMinutes(30), 
      false, 
      "user,user1", 
      FormsAuthentication.FormsCookiePath); 

의 Web.config

<authentication mode="Forms"> 
    <forms loginUrl="~/Account.mvc/LogOn" timeout="2880" name=".ASPXFORMSAUTH" /> 
</authentication> 

티켓 창조 만료 값이해야합니까 파일> = Web.config의 값?

답변

23

인증 쿠키를 수동으로 작성하기 때문에 web.config의 시간 초과 값은 완전히 무시됩니다. 후 다시이없는 즉, 사용자가 한 번에 로그인 할 수 있도록 발생할 수 있습니다 다른 곳 저장된 값되지만, 나는 30 분에 모두 설정할 것,

var ticket = new FormsAuthenticationTicket(
    1, 
    user.UserID, 
    DateTime.Now, 
    DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes), 
    false, 
    "user,user1", 
    FormsAuthentication.FormsCookiePath 
); 
var encryptedTicket = FormsAuthentication.Encrypt(ticket); 
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) 
{ 
    HttpOnly = true, 
    Secure = FormsAuthentication.RequireSSL, 
    Path = FormsAuthentication.FormsCookiePath, 
    Domain = FormsAuthentication.CookieDomain 
}; 
Response.AppendCookie(cookie); 
+0

감사 : 그래서 같은 값을 갖는 것이 좋습니다 시간 초과 됐어? – Don

+1

작은 수정 -'Secure = FormsAuthentication.RequireSSL'이어야하며,'HttpOnly' 설정은 Javascript에서 숨겨진 쿠키를 만듭니다 (적절한 브라우저에서는 IE6이 지원하지 않습니다). – Keith

+0

@Keith, 잘 잡으세요. 그 점을 지적 해 주셔서 감사합니다. –