2012-04-20 5 views
1

내 ASP.NET MVC 3 응용 프로그램에서 LogOn 작업의 내 기억 상자를 체크하면 영구 쿠키가 생성되어 브라우저를 닫고 다시 열 때 내가 피들러를 사용하는 경우세션 ID가 쿠키에 저장되지 않음

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 

, 내가 세션 ID가과 같이 전송되는 볼 수 있습니다 : 그것은 아직도 로그인해야

Request sent 342 bytes of Cookie data: 

ASP.NET_SessionId=<Session ID>; .ASPXAUTH=<Auth String> 

을하지만 내 브라우저를 다시 열고 닫을 때 , 아직 로그인되어 있지만 요청이 세션 ID를 보내지 않습니다.

Request sent 298 bytes of Cookie data: 

.ASPXAUTH=<Auth String> 

나는 내 행동에 Response.Write(Session.SessionID)을 넣어 브라우저가 다시 열리면 페이지가 새로 고침 될 때마다 변경됩니다. 브라우저를 닫지 않으면 세션 ID가 새로 고침 될 때마다 동일하게 유지됩니다.

저는 InProc으로 경험했기 때문에 StateServer을 사용하여 세션 상태를 유지하려고합니다.

답변

3

예상되는 동작입니다. 권한 쿠키 설정의 개념과 세션의 개념은 같은 것이 아닙니다. ASP.NET의 세션은 세션이 세션 별 쿠키에 저장되기 때문에 사용자가 브라우저를 열어 둔 채로 살아있게됩니다.

"... 세션 ID 값이 브라우저의 만료되지 않는 세션 쿠키에 저장됩니다. (http://msdn.microsoft.com/en-us/library/ms178581.aspx)

영구적 인 세션은 좋은 생각입니다. 세션의 일반적인 경우는 메모리에 저장된다는 것입니다. 로그인하지 않은 사용자의 세션을 실제로 저장 하시겠습니까? 세션을 저장하려고하는 "세션"데이터는 세션에 저장하지 말고 영구 데이터 저장소 (읽기 : 데이터베이스)에 저장해야합니다.

귀하의 의견에 따라 업데이트

난 당신이 이런 식으로 뭔가를 제안 할 수 있음 :

내가 세션 변수에 사용자의 회사를 보유하고 싶었 기 때문에 오른쪽이 좋아, 그것은에서 사용되는
public string GetMyCompany(){ 
    return Session["MyCompany"] = Session["MyCompany"] ?? GetMyCompanyFromDatabase(); 
} 
+0

내 '_Layout.cshtml' 파일과 Session 변수는 응용 프로그램의 모든 뷰에서 유지되므로 가장 좋지만 브라우저를 닫으면이 변수가 더 이상 존재하지 않습니다. – CallumVass

+0

물론 완벽합니다. 그러나 다음과 같이하면 좋을지도 모르겠다. public string GetMyCompany() { return Session [ "MyCompany"] = Session [ "MyCompany"] ?? GetMyCompanyFromDataBase(); } – aquinas

+0

아, 완벽하게 시도해 보겠습니다. 감사합니다. – CallumVass

관련 문제