2012-11-28 3 views
1

FormsAuthentication을 사용하는 로그인 시스템에서 브라우저를 닫고 열 때 어떤 이유로 나를 로그 아웃 할 수 있습니다. 로그인 코드를 설정하는 방법은 다음과 같습니다.브라우저를 닫은 후 로그인 상태가 손실됩니다.

  FormsAuthenticationTicket ticket; 

       ticket = new FormsAuthenticationTicket(1, tbUsername.Text, DateTime.Now, DateTime.Now.AddYears(1), true, string.Empty, FormsAuthentication.FormsCookiePath); 

      string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
      cookie.HttpOnly = true; 

      //Add the cookie to the request 
      Context.Response.Cookies.Add(cookie); 

본인이 볼 수 있듯이 세션간에 영구적으로 쿠키를 설정했습니다. 다음은 내 web.config 파트입니다.

<authentication mode="Forms"> 
    <forms slidingExpiration="false" loginUrl="~/Login.aspx" name="BOIGAUTH" defaultUrl="~/Admin/Settings.aspx"/> 
</authentication> 

또한이 특정 응용 프로그램에서는 SessionState가 비활성화됩니다. 누구 잘못 알아요?

Btw는 웹 사이트와 상호 작용하지 않았는데도 2 시간 이상 응용 프로그램 브라우저를 켜 놓아 두었습니다. 브라우저를 닫을 때 쿠키가 손실됩니다.

+1

어떤 브라우저를 사용하고 있습니까? – curtisk

+0

Firefox와 Chrome에서 모두 테스트했는데 브라우저 문제가 아닌 것 같습니다. – TheGateKeeper

답변

5

쿠키에 만료를 설정하지 않으면 브라우저 세션 전용 쿠키가되고 모든 브라우저 인스턴스를 닫으면 사라집니다.

Expires 속성을 사용하여 쿠키가 지속되도록하려면 쿠키에 만료 기간을 설정해야합니다.

HttpCookie cookie = new HttpCookie(
    FormsAuthentication.FormsCookieName, encryptedTicket); 
cookie.HttpOnly = true; 
cookie.Expires = DateTime.Now.AddMinutes(1000); 

사이드 노트 : 브라우저가 닫을 때 모든 쿠키를 지우도록 구성되어 있지 않은지 확인하십시오.

+0

나는 티커에 이미 시간을 뒀다. – TheGateKeeper

+0

@TheGateKeeper, "Ticker"가 무엇인지 모르시겠습니까? 만료가 설정 되려면 쿠키 자체가 필요하며 브라우저는 쿠키의 가치에 신경 쓰지 않습니다. –

+1

나는 티켓을 의미했다, 미안. 쿠키 만료 값이라고 가정 했으므로 만료 값이 있습니다. 쿠키와 티켓 모두에서 설정하려고합니다. – TheGateKeeper

관련 문제