ASP.NET 웹 사이트에는 사용자 세션이 이상하게 작동하는 세션 데이터가 나타나거나 사라지고 다시 나타나는 문제가 있습니다.
문제가 무엇인지 알고 있다고 생각합니다.
- 설정은 2 x로드 밸런스 웹 서버 + 단일 세션 상태 데이터베이스입니다.
- ASP.NET SQL 세션 상태 저장소는 IIS 웹 사이트 인스턴스 ID (메타베이스 ID)에 의존하여 들어오는 세션 쿠키 ID 및 검색 / 저장 값을 고유하게 식별하는 것으로 보입니다.
- 웹 사이트의 IIS 웹 사이트 인스턴스 ID가 라이브 서버에 각각 다른 (ID / W3SVC / 1 / 루트 웹 서버에 A, ID / W3SVC / 2 / 루트 웹 서버 B에).
- 로드 밸런싱은 클라이언트 선호도를 사용하지 않으므로 각 사용자 HTTP 요청은 어느 서버로든 갈 수 있습니다.
따라서 사용자가 사이트에 로그온하여 이동하면 각 HTTP 호출은 웹 서버 중 하나로 이동할 수 있으므로 서버에 따라 다른 ID를 가진 세션 상태 레코드를 사용합니다. 실제로 사용자는 동시에 2 개의 개별 세션 인스턴스를 갖게됩니다. 나는 데이터베이스로이 문제를 확인했습니다 생각 ASPStateTempSessions의 테이블, 각 세션 쿠키 ID 2에 해당하는 것 같다 거의-같은 이름의 자신의 ID를 만 난 기반으로 수정 믿고 지난 몇 자 차이 (기록 의 AppID 로부터 AspStateTempApplications 테이블) 서로의 초 이내에 생성되었습니다.
따라서 하나의 세션 레코드에 대한 변경 사항이 해당 웹 서버에 대해서만 지속되므로 세션 상태가 오작동하는 것처럼 보입니다. 사용자가 다른로드 밸런싱 된 서버로 이동하면 세션 값이 사라지거나 되돌아 간 것처럼 보입니다.
해결책은 사이트의 IIS 인스턴스 ID를 동기화하는 것입니다 (예 : / W3SVC / 1 / Root ).하지만 고급 설정에서 IIS에서 해당 값을 편집하려고 시도했지만 OK를 저장했지만 확인을 마쳤습니다. 사이트를 다시 변경할 때까지 해당 서버에서 404를 반환합니다.
나는 VBS 스크립트 발견 이 문제를하지만 나는 그것을 시도하고 걱정 만 있도록 IIS 6이 될 것으로 보인다. 다른 사람이 IIS 7.5에서이 상황을 겪었습니까? 어떻게 해결 했습니까?
편집 / 솔루션
내 실수는 IIS에서 사이트 인스턴스 ID를 변경 한 후 IIS를 다시 시작하는 것을 잊었다는 것입니다. 이후 ID가 업데이트되고 두 웹 서버에서 ASP.NET 세션이 동기화되었습니다.
전체 지침 :
- 서버 LIVE1의 원격 데스크톱, IIS Mgr을 열고 문제 사이트를 클릭 한 다음 사이드 바에서 고급 설정 을 선택하십시오 .
- ID를 10과 같이 고유 한 것으로 변경하십시오. 확인을 클릭하십시오.
- 웹 서비스를 다시 시작하십시오 (
c:\windows\system32\iisreset /restart
).
LIVE2에 대해서도 동일하게 수행하십시오 (사이트 ID가 LIVE1과 동일해야 함).
사이트 ID는 사이트 파일의 위치에 영향을 미칩니다 (예 : 로그 파일 폴더) C:\inetpub\logs\LogFiles\W3SVC10
.
또한 각 서버의 IIS 구성 파일에서 사이트 ID 속성 을 편집하여 수동으로 이러한 변경을 수행 할 수 C:\Windows\System32\inetsrv\config\applicationHost.config
있습니다. 관리자 권한이 필요하며 이후에도 재설정이 필요합니다.