2011-12-30 5 views
1

일부 데이터를 세션 상태로 저장하려고합니다. 사용자가 양식 인증을 통해 처음 로그인 할 때이 데이터를 저장해야합니다. 폼 인증 티켓 만료와 동일한 수명을 갖기 위해이 세션 상태 변수가 필요합니다. 이 둘이 동기화 된 상태를 유지할 수있는 방법이 있습니까?세션 상태에 데이터 저장 및 Froms 인증 세션 동기화 유지

+0

항상 확인하는 경우에만 가능합니다. 예를 들어 세션 데이터를 읽을 때마다 (SessionData가 && UserIsLogedOn인지) 확인합니다. – Aristos

+0

감사합니다. 보안하려는 데이터는 사용자 비밀번호 (기존 웹 서비스이므로 선택권이 없습니다)이며 세션 인증이 양식 인증 티켓에 안전하다고 생각했습니다. 당신은 더 나은 곳을 생각할 수 없다. 그래서 나는이 문제들을 동기화 할 수 없다. –

+0

세션 상태가 안전하지 않습니다! 세션 상태의 쿠키가 도난 당하여 세션을 얻을 수 있습니다. – Aristos

답변

3

이러한 두 가지 동기화 상태를 유지할 수있는 방법이 있습니까?

둘 다 web.config에서 동일한 값으로 설정할 수있는 시간 초과 값이 있습니다. 이제 여기에 귀하의 문제가 시작될 수있는 곳이 있습니다. 폼 인증 쿠키는 세션이 만료되는 반면 슬라이딩 만료 설정을 가질 수 있습니다. 두 개의 시간 초과 값을 일치 시키려면 인증 쿠키에 대해이 슬라이딩 만료를 비활성화하십시오. 그리고 그것은 시작에 불과합니다. 세션의 경우 저장 위치를 ​​Off, InProc, StateServer, SqlServer 중에서 선택할 수 있습니다.

Off (개인적으로 내가 사용하는 것)를 사용하면 ASP.NET 세션이 비활성화되고 기본적으로 세션이 없습니다.

InProc (기본값)로 설정하면 세션이 메모리에 저장됩니다. IIS가 다른 상황, 즉 비활성 기간, 특정 CPU/메모리 임계 값에 도달하면 AppDomain을 재활용하기로 결정할 수 있다는 것을 제외하고는 ... 기본적으로 세션이 메모리에 저장되고 AppDomain이 웹 서버에 의해 언로드되면 분명히 인증 쿠키가 계속 유효한 반면이 세션에 저장된 모든 것을 잃어 버리게됩니다.

StateServer와 SQLServer는 웹 서버의 메모리에 정보가 더 이상 저장되지 않고 AppDomain이 재활용 될 때까지 처리 할 수없는 두 가지 다른 프로세스 외부 세션 저장 모드입니다.

기본적으로 요약하면 ASP.NET 세션 수명주기 및 ASP.NET 폼 인증 쿠키 수명주기를 안정적으로 동기화하는 것은 매우 어렵습니다. ASP.NET 세션을 전혀 사용하지 않음으로써이 문제를 해결합니다.