로드 균형 조정 된 IIS 7.5 웹 서버 ASP.NET 세션 상태 문제


14

ASP.NET 웹 사이트에는 사용자 세션이 이상하게 작동하는 세션 데이터가 나타나거나 사라지고 다시 나타나는 문제가 있습니다.

문제가 무엇인지 알고 있다고 생각합니다.

  1. 설정은 2 x로드 밸런스 웹 서버 + 단일 세션 상태 데이터베이스입니다.
  2. ASP.NET SQL 세션 상태 저장소는 IIS 웹 사이트 인스턴스 ID (메타베이스 ID)에 의존하여 들어오는 세션 쿠키 ID 및 검색 / 저장 값을 고유하게 식별하는 것으로 보입니다.
  3. 웹 사이트의 IIS 웹 사이트 인스턴스 ID가 라이브 서버에 각각 다른 (ID / W3SVC / 1 / 루트 웹 서버에 A, ID / W3SVC / 2 / 루트 웹 서버 B에).
  4. 로드 밸런싱은 클라이언트 선호도를 사용하지 않으므로 각 사용자 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 세션이 동기화되었습니다.

전체 지침 :

  1. 서버 LIVE1의 원격 데스크톱, IIS Mgr을 열고 문제 사이트를 클릭 한 다음 사이드 바에서 고급 설정 을 선택하십시오 .
  2. ID를 10과 같이 고유 한 것으로 변경하십시오. 확인을 클릭하십시오.
  3. 웹 서비스를 다시 시작하십시오 ( c:\windows\system32\iisreset /restart).

LIVE2에 대해서도 동일하게 수행하십시오 (사이트 ID가 LIVE1과 동일해야 함).

사이트 ID는 사이트 파일의 위치에 영향을 미칩니다 (예 : 로그 파일 폴더) C:\inetpub\logs\LogFiles\W3SVC10.

또한 각 서버의 IIS 구성 파일에서 사이트 ID 속성 을 편집하여 수동으로 이러한 변경을 수행 할 수 C:\Windows\System32\inetsrv\config\applicationHost.config있습니다. 관리자 권한이 필요하며 이후에도 재설정이 필요합니다.

답변:


11

귀하의 질문으로 판단하면 세션 데이터를 추적하는 중앙 세션 상태 서버 (DB?)가 있습니까?

또한 양식 인증 등이 작동하도록 암호화하는 데 사용되는 컴퓨터 키를 동기화해야합니다. 세션 식별에도 영향을 줄 수 있습니다. 잘 모르겠습니다.

IIS 7에서 컴퓨터 키 구성

또한 컴퓨터간에 공유 구성을 사용해야합니다. 다른 컴퓨터 키로 문제를 해결할 수도 있습니다.

웹 서버 팜에 대한 IIS 구성 동기화?

편집 : 사이트 ID를 변경할 때 웹 관리자가 변경되었는지 확인하기 위해 IIS 관리자를 다시 시작하려고 했습니까? 어쩌면 구성이 ID에 연결되어 ID를 변경하면 문서 루트 등의 항목도 수정됩니다.


아이디어 Jishi에 감사하지만 web.configs에서 이미 machineKey를 동기화했습니다. 웹 서버에서 사이트를 완전히 제거하고 재구성하지 않고도 사이트의 IIS 인스턴스 ID를 변경하는 방법을 실제로 찾고 있다고 생각합니다.
James McCormack

사이트 ID를 변경할 때 IIS 관리자를 다시 시작하여 웹 루트가 변경되었는지 확인 했습니까? 어쩌면 구성이 ID에 연결되어 ID를 변경하면 문서 루트와 같은 내용도 수정 될 수 있습니다.
jishi

1
그렇습니다. IIS 서비스를 다시 시작하는 것을 잊었습니다 (명령 줄 iisreset / restart). 그 후 잘 작동했습니다! 이 정보로 답변을 업데이트하면 수락 된 답변을드립니다.
James McCormack

거래 완료 다행 이네요.
jishi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.