세션 상태 예약
사용자가 특정 작업을 사용자로 완료 할 수없는 ASP.net 응용 프로그램이 있는데, 이유 때문에 세션을 잃는 것과 관련이있을 수 있습니다 (현재 정보를 유지하고 로그인 됨).
나는 왜 그들이 결혼식을 잃게 될지에 대해 혼란스러워서 나의 첫 번째 질문은 :
일반적으로 사용자가 ASP.net에서 세션을 잃게 만드는 원인은 무엇입니까?
사용자가 언제 세션을 잃고 직접 재현 할 수 없는지 알 수 없기 때문에 :
사용자가 세션을 잃었을 때 어떻게 추적 할 수 있습니까?
아래는 참조를위한 세션 상태 구성입니다.
<sessionState
mode="InProc"
cookieless="false"
cookieName="My.Site.Com"
timeout="480"/>
여러 가지로 인해 세션 상태가 신비롭게 사라질 수 있습니다.
- sessionState 초과가 초과되었습니다.
- web.config 또는 AppDomain이 재활용하는 기타 파일 형식을 업데이트합니다.
- IIS의 AppPool이 재활용됩니다.
- 많은로 사이트를 업데이트하면 ASP.NET이 사전에 AppDomain을 삭제하여 메모리를 다시 파일하고 보존합니다.
-
IIS 7 또는 7.5를 사용하는 경우 다음 사항을 확인하십시오.
- 기본적으로 IIS는 일정 시간 동안 사용하지 않는 자체적으로 꺼 지도록 AppPools를 설정합니다.
- 기본적으로 IIS는 AppPools를 1740 분마다 재활용하도록 설정합니다 (분명히 루트 구성에 따라 다르지만 이것이 바로입니다).
- IIS에서 AppPool의 "고급 설정"을 확인하십시오. "Idle Time-out"이라는 속성이 있습니다. 0 또는 노래 (20)보다 높은 숫자로 설정하십시오.
- IIS에서 AppPool의 "재활용"설정을 확인하십시오. 여기에서 AppPool의 재활용을 활성화 또는 활성화 할 수 있습니다. 마법사의 두 번째 페이지는 종료 된 각 유형의 AppPool을 이벤트 로그에 기록하는 방법입니다.
IIS 6을 사용하는 경우 동일한 설정이 적용 방법 (대부분의 경우 액세스 방법이 다르지만) 재활용을 기록하는 것은 더 어렵습니다. 다음은 IIS 6에서 AppPool 재활용 이벤트를 기록하는 방법에 대한 링크입니다.
-
웹 앱에서 파일을 업데이트하는 경우 모든 세션이 감소 될 예상해야합니다. 그것은 짐승의 본질입니다. 그러나 여러 번 발생하지 않을 수도 있습니다. 15 개 이상의 파일 (dll 등)을 업데이트하면 사이트에 액세스하는 사용자가 계속 페이지를 다시 시작하는 일정 기간 동안 여러 번 다시 시작될 가능성이 있습니다. 다음 두 링크를 참조하십시오.
http://support.microsoft.com/kb/319947
numCompilesBeforeAppRestart를 더 높은 숫자로 설정하거나 수동으로 AppPool을 바운스하면 문제가 제거됩니다.
-
세션이 생성되거나 종료 될 때 알림을 받도록 Application_SessionStart 및 Application_SessionEnd를 항상 처리 할 수 있습니다. HttpSessionState 클래스 에는 활성 user-에 대해 새 세션이 만들어 졌는지 확인하기 위해 모든 페이지 요청 고객에서 확인할 수 있는 IsNewSession 속성도 있습니다.
-
마지막으로 귀하의 상황에서 가능하다면 SQL Server 세션 모드 를 사용했습니다. 대량의 데이터를 저장하는 경우 (모든 요청이 SQL Server의 전체 데이터를로드하고 저장하는 경우) 권장되지 않는 사용자 지정 개체를 넣는 경우 (직렬화 가능해야 할 경우) 고통 스러울 있습니다. ),하지만 몇 시간을 재활용하지 않도록 AppPool을 구성 할 수없는 공유 호스팅 시나리오에서 도움이됩니다. 제 경우에는 존재하는 정보를 저장하고 성능에 영향을 미칠 수 있습니다. 여기에 기존 사용자가 기본적으로 SessionID를 생성한다는 사실을 추가하고 내 사용자는 모든 상태가 SQL Server에 저장 되었기 때문에 AppPool 재활용으로 인해 메모리 내 세션이 삭제되고 사실을 알지 있습니다.
ASP.NET 4.0에서 모든 페이지 요청에서 세션이되고 각 페이지 요청에서 SESSION_START 코드가 실행되는 상황이 발생했습니다. 이것은 발생하는 모든 세션의 모든 사용자에게 발생하는 발생하는 때 각 페이지 요청에서 발생했습니다.
내 web.config sessionState 태그에는 언급 된 것과 동일한 설정이 있습니다.
cookieless="false"
다음과 같이 변경했을 때 ...
cookieless="UseCookies"
... 문제가 사라진 것 같았습니다. 분명히 사실 | false는 ASP.NET 1의 이전 선택. ASP.Net 2.0부터 열거 된 선택이 사용 가능하기 시작했습니다. 이 옵션은 더 이상 사용하지 않는 것입니다. "거짓"값은 과거에 문제를 일으키지 이론합니다. 저는 ASP.NET 4.0에서만 발견했습니다. 4.0에서 더 이상 지원하지 않는 것이 변경됩니다.
또한 얼마 전에 이것을 발견했습니다. 이전에는 문제가 간헐적으로 발생했기 때문에 여전히 문제가 발생할 수 있다고 생각하지만 지금까지는이 새로운 설정으로 작동하고 있습니다.
세션이 손실되었습니다 ....
세션이 손실되는 시나리오를 찾았습니다-Asp.net 페이지에서 금액 텍스트 상자 필드에 잘못된 문자가 있고 다른 목적으로 세션 변수 검색이 뒤 따릅니다 .Convert.ToInt32 또는 double을 통해 잘못된 숫자 구문 분석을 게시 한 후 첫 번째 예외가 발생하지만 해당 줄에 오류가 표시되지 않습니다. 대신 처리되지 않은 예외로 인해 세션이 null 인 경우 세션 검색시 오류를 표시하여 디버깅을 속입니다.
힌트 : 시스템이 실패하는지 테스트하십시오-파괴적입니다. 예 : 검색 결과가 표시된 후 검색 조건에 정크를 입력하고 검색 결과의 세부 정보로 이동 ..., 다음과 같은 관련없는 시나리오에서 정크를 충분히 입력하십시오 ...,이 시스템을 사용자의 컴퓨터에서 재현 할 수 있습니다. 지역 코드베이스도 ... :)
그것이 도움이되기를 바랍니다, hydtechie
제 경우에는 AppPool-> AdvancedSettings-> Maximum Worker Proccesses를 1로 설정했습니다.
Session_Start 및 Application_Start의 Global.asax에 로깅을 추가하여 사용자의 세션 및 응용 프로그램 전체에서 진행되는 작업을 추적 할 수 있습니다.
또한 웹 팜 모드 (응용 프로그램 풀에 정의 된 여러 IIS 스레드) 또는 부하 분산으로 실행 중인지 확인하십시오. 사용자가 동일한 메모리가없는 다른 서버에 접속할 수 있기 때문입니다. 이 경우 세션 모드를 SQL Server로 전환 할 수 있습니다.
나는 문자열이나 정수가 아니라 데이터 행인 세션 만 잃고있었습니다. 직렬화 가능한 객체에 데이터를 넣고 세션에 저장하면 저에게 효과적이었습니다.
Ajax를 통해 콘텐츠를 검색 할 때 IIS 8에서 문제가 발생했습니다. 문제는 MaximumWorkerProcesses
로 설정 2
되었고 Javascript는 17 개의 동시 요청을 열었습니다. 이는 AppPool이 처리 할 수있는 것 이상이며 인증 데이터가없는 새 풀이 열렸습니다.
해결책은에서로 변경 MaximumWorkerProcesses
하는 것 0
입니다 IIS -> Server -> Application Pools -> [myPool] -> Advanced Settings -> Process Model -> MaximumWorkerProcesses
.
문제와 관련이 있는지 모르지만 Windows 2008 Server R2 또는 SP2가 IIS 설정을 변경하여 세션 지속성 문제가 발생합니다. 기본적으로 HTTP와 HTTPS에 대해 별도의 세션 변수를 관리합니다. 변수가 HTTPS로 설정되면 전환 될 때마다 HTTPS 페이지에서만 사용할 수 있습니다.
문제를 해결하기 위해 IIS 설정이 있습니다. IIS 관리자에서 ASP 속성을 열고 확장 세션 속성을 , 변경 보안 연결에 새로운 ID를 하는 거짓 .
참조 URL : https://stackoverflow.com/questions/3515947/losing-session-state
'ProgramingTip' 카테고리의 다른 글
Python 목록에서 정렬과 uniq를 수행하는 가장 육종 방법은 무엇입니까? (0) | 2021.01.06 |
---|---|
알고리즘 보안 및 보안 : MD5 또는 SHA1? (0) | 2021.01.06 |
C #에서 사전 간의 동등성 테스트 (0) | 2021.01.06 |
SQL에서 UNION 뒤의 어디 문? (0) | 2021.01.06 |
Spring에서 BeanPostProcessor와 init / destroy 메소드의 차이점은 무엇입니까? (0) | 2021.01.06 |