2011-01-02 4 views
7

폼 인증을 사용하는 Asp Mvc 2 사이트가 있습니다. 로컬에서 실행할 때 로그인하여 무기한 로그인 상태를 유지할 수 있습니다.1 분 정도 후에 내 사용자가 로그 아웃되는 이유는 무엇입니까?

그러나 서버에 넣을 때 몇 분 동안 만 로그인 한 상태로 로그 아웃 한 것처럼 보입니다. 나는 쿠키를 보았다. 관련이 있다고 보이는 2 개가있다 :

.ASPXAUTH 세션 쿠키 인 .ASPXANONYMOUS는 3 개월 만료된다.

페이지를 새로 고침 할 때 로그 아웃 할 때까지 쿠키가 그대로 남아 있습니다. 새 .ASPXANONYMOUS 쿠키를 얻었을 때처럼 보이지만 .ASPXAUTH는 동일하게 보입니다.

일정 시간이 지나면 무언가를하기 전에는 로그인 상태로 유지되는 것 같습니다. 내가 로그인하는 즉시 양식을 제출하면 문제가 없지만, 데이터를 계속 제출하면 1 분 정도 후에 제출자 중 하나가 로그 아웃 한 사용자가 아닌 사용자가됩니다. 다른 모든 제출물이 작동 한대로 로그인했습니다.

무엇이 문제의 원인 일 수 있으며 어떻게 다른 것을 추적 할 수 있습니까? & 무기한으로 로그인 할 수 있도록 변경합니까?

편집,

의 단일 서버,하지만 좀 더 조사 및 가능성이 후보자를 검색 한 후 내가 서버에 1백메가바이트 이상을 사용하고 응용 프로그램 풀을 재활용지고 것 같다. 지금 내가 알아야 할 것 같아

  • 얼마나 많은 메모리를 사용하고 있는지 확인할 수 있습니까?
  • 이를 줄이기위한 조언이 있습니다.
+0

어떤 서버를 호스팅하고 있습니까? 어떤 세션 공급자를 사용하고 있습니까? – mlibby

+0

하나의 서버 만 있거나 부하가 분산 된 서버 팜이 있습니까? –

+0

@mcl, 나는 명시 적으로 세션 공급자를 언급하지 않고 있다고 생각하지 않습니다. 그래서 기본값을 사용하고 있습니다. 미안하지만 더 구체적 일 수는 없지만 이것은 나에게 조금 새로운 것입니다. –

답변

8

유휴 시간 초과 또는 새로 생성/변경된 어셈블리로 인해 ASP.NET 응용 프로그램이 다시 순환되거나 종료 될 수 있습니까?

ASP.NET 웹 응용 프로그램이 시작되면 기본적으로보기 상태 및 세션 쿠키에 대한 암호화 키가 생성됩니다. 이렇게하면 이전에 실행 된 응용 프로그램 (또는 다른 시스템)에서 원래 제공된 데이터가 무효화됩니다.

세션이 ASP에서 살아남도록하십시오.NET 응용 프로그램주기 (다중 서버 팜이) 당신이 당신의 web.config의 키를 지정할 수 있습니다

decryptionKeyvalidationKey 16 진수 AES와 알고리즘에 따라 길이의 문자열 (이다
<system.web> 
    ... 
    <machineKey 
    decryption="AES" 
    validation="SHA1" 
    decryptionKey="..." 
    validationKey="..." 
    /> 

: 64 자리와 SHA1 : 128, 다른 알고리즘의 경우 MSDN을 확인하십시오.

이러한 키 암호화 생성, 및 .NET 파워 쉘에서 사용될 수 이렇게하는 종류가되어야한다 AES 들어

$rng = New-Object "System.Security.Cryptography.RNGCryptoServiceProvider" 
$bytes = [Array]::CreateInstance([byte], 16) 
$rng.GetBytes($bytes) 
$bytes | ForEach-Object -begin { $s = "" } -process { $s = $s + ("{0:X2}" -f $_) } -end { $s} 

은 SHA1 64의 길이를 사용하여, 상기 배열의 길이를 사용한다.

+0

감사! 이것은 트릭을 완료 한 것 같습니다. 적어도 페이지가로드 될 때까지 (아마도 재활용이 진행되었을 때) –

+0

이것은 세션 키가 생존하는 데 도움이됩니다. , 권리? 그러나 실제 데이터를 Session에 저장하는 경우 SQL이나 파일과 같은 비 지속성 세션 유지 공급자를 사용하고 있는지 확인해야합니다. – mlibby

+1

@mcl : 맞습니다. 프로세스에서 세션 상태는 프로세스와 함께 종료됩니다. 처리 불능이 필요합니다. 이는 SQL Server가 시스템을 다시 시작할 때 생존 할 수 있음을 의미합니다. 어쨌든 세션 상태가 일시적이라고 가정하는 것이 좋으며, 장기간 필요로하는 것은 세션으로 캐시 된 영구 저장소에 있어야합니다. – Richard

1

웹 서버의 세션 시간 초과가 web.config의 양식 인증 구성에서 설정 한 것보다 훨씬 작은 시간 간격으로 구성 될 가능성이 큽니다.

기본 세션 시간 초과는 IIS6 및 IIS7의 경우 20 분입니다.

당신은 웹 서버의 관리 인터페이스에 액세스 할 수있는 경우, 당신은 GUI를 통해 타임 아웃을 올릴 수 있지만 IIS7이 <sessionState><sessionPageState> 섹션을 사용하는 경우 그것은 또한 config 파일에서 설정할 수 있습니다

http://msdn.microsoft.com/en-us/library/cc725820(v=ws.10).aspx

1

확인 webconfig 인증 섹션

<authentication mode="Forms"> 
    <forms name="UniqueName" loginUrl="login.aspx" path="/" > 
    </forms> 
</authentication> 

각 호스팅 사이트에 대한 인증 쿠키 이름이 고유한지 확인하십시오.

0

이들 중 어느 것도 작동하지 않는 경우 응용 프로그램 풀을 확인하고 유휴 시간 초과가 20 분 이상으로 설정되어 있는지 확인하십시오. 응용 프로그램 풀을 클릭하고 오른쪽에 Advanced Settings 링크를 선택하고 Process Model 섹션을 찾아 Idle Timeout 값을 늘리십시오.

관련 문제