2009-10-29 3 views
16

두 개의 개체를 세션에 저장합니다. 어떻게 든 다른 사용자의 개체 중 하나가 다른 사용자의 세션에로드되었습니다. 사용자는이 특정 데이터에 액세스 할 수 없어야하며, 데이터를 보자 마자 뭔가 잘못되었다는 것을 알게되었습니다.StateServer (SCARY!)를 사용하는 ASP.NET 세션 혼합

우리는 그에게 선물 된 데이터의 시각적 증거를 가지고 있으며, 은 확실히입니다. 세션이 섞여 있지 않으면 일어날 수 없습니다. 이것은 우리가 알아낼 수없는 매우 무서운 상황입니다 (우리는 그것을 재현 할 수 없습니다). 우리를위한 유일한 대답은 세션 변수를 혼합하기 위해 ASP.NET StateServer를 비난하는 것입니다. 이는 완전히 받아 들일 수 없으며 우리를 나쁜 위치에 놓습니다.

우리의 응용 프로그램은 StateServer cookieless="false" 세션 모드와 FormsAuthentication을 사용하여 IIS6이 설치된 Windows Server 2003에서 실행되는 ASP.NET 2.0 응용 프로그램입니다.

이 문제가 발생한 사람이 있습니까? 어떻게 해결할 수 있습니까?

+0

본 적이 있지만 .Net 1.1. t는 2.0으로 수정되었습니다. 답변을 게시하기 전에 몇 가지 질문이 있습니다. 첫 번째 질문은 쿠키없는 세션을 사용하고 있습니까? – David

+0

감사합니다. 예, 쿠키가 필요 없습니다 (질문에서 말합니다). –

+0

죄송합니다 ... 읽지 않았습니다. cookieless 세션을 사용한다는 것은 SessionID가 querystring 매개 변수로 URL에 포함되어 있으므로이 경우 두 사용자간에 URL의 SessionID querystring 매개 변수가 다른지 확인 했습니까? – David

답변

12

우리는 내 이전 기업이 정확한 문제로 실행하고 디버깅하기 위해 3 주했다. ASP.NET은 사용자에게 다른 사람의 세션 상태를 제공하고있었습니다. 디버그 환경에서 복제하는 것은 정말로 불가능했습니다.

우리가 발견 한 바로 그 픽스가 web.config에있는 것입니다. 나는 그것을 완전히 기억하지 못하여, 나는 약간의 시간을 인터넷 검색으로 보냈다. 이 문제는 출력 캐싱과 관련이 있다고 생각합니다. "세션 및 출력 캐싱"에서이 기사를 살펴보십시오.

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineJuly2006en-us.chm 그 시나리오처럼 들리는 경우, 수정을

(기사는 이 사이트 7 월에 제프 프로 시즈 2006 MSDN 잡지의 버전이 10 개 일반적인 ASP.NET 함정을 방지하여 원활하게 실행 유지라는 제목) web.config에서 enableKernelOutputCache 옵션을 비활성화하는 것일 수도 있습니다.

행운을 빈다.

+0

나는 당신이 옳다고 믿습니다! 실제로 우리는 * 하나의 웹 양식에서 출력 캐싱을 사용할 수 있었고 그 양식은 불일치하는 세션 변수를 채우는 책임이있었습니다. 당신은 성자, 학자, 신사, 천재입니다. 나는 너에게 충분히 감사 할 수 없다 !! –

+0

+1. Josh는 링크에서 지적한대로 전체 세션이 아닌 하나의 변수 만 교체한다고 말했지만 – wtaniguchi

+0

명확히하기 위해, 나는 단지 하나의 변수가 교체되었다는 증거 만 가지고있다. –

5

먼저 자신의 코드에서 버그를 찾으십시오. 이것은 가장 가능성있는 설명입니다. 예 : 정적 필드 또는 사용자 별 데이터에 대한 ASP.NET 캐시와 같은 다른 공유 메모리를 사용합니다.

+0

방금 ​​지난 10 일 동안이 일을했습니다. 나는 이유에 대해 나의 질문에서 "확실히"라는 말을 강조했다. 나를 믿어 라, 우리 코드는 방탄이다. –

+0

또한이 앱은 수년간 제작 중이며 한 번만이 문제가 발생했습니다. –

+0

+1 Josh가 묘사 한 것과 같은 것을 볼 때마다, 그것이 범인입니다. – kemiller2002

0

몇 번이나 발생 했습니까? 브라우저를 사용하는 사용자 또는 세션 ID로 서로 링크를 보내는 사용자를 확인 했습니까?

State Server 버그에 대해 확실히 확인하는 한 가지 방법은 다른 세션 관리자로 전환하는 것입니다. SQL Server를 사용하거나 사용할 수 있으면 in-proc으로 대체하고 버그를 재현하는 방법을 찾는 것이 좋습니다. 그것을 테스트 할 수 있습니다.

+0

한 번만 발생했습니다. 브라우저 인증은 사용자 인증이 언제든지이 데이터에 대한 액세스를 허용하지 않기 때문에 분명히 다릅니다. 세션 ID 해킹과 같은 작업을 수행하는 방법은 없습니다. 사용자는 세션이 무엇인지 모르는 노인입니다. –

3

가능한 답변 - 쿠키가없는 세션 상태를 사용하여 유사한 문제가보고되었습니다.

session showing something wrong

편집 -

또 다른 가능한 답을 추가는 :

An ASP.NET page is stored in the HTTP.sys kernel cache in IIS 6.0 when the ASP.NET page generates an HTTP header that contains a Set-Cookie response

+0

David, 틀렸어. 세션 모드는 쿠키가 아닙니다. –

+0

+1에서 편집 된 두 번째 링크가 유망 해 보이기 때문에 +1. – GBegen

0

두 명의 교차 사용자가 모두 동일한 캐시 프록시를 사용할 수 있습니까? 그렇다면 URL이 일치하면 한 사용자가 다른 사용자에게 캐시 된 데이터를 볼 수 있습니다. 특히 프록시가 올바르게 작동하지 않는 경우가 있습니다.

Google Web Accelerator 프로젝트의 주요 문제는 아니 었습니까? (단종 되었습니까?)

0

이 문제가있는 경우 부분보기에서 OutputCache 특성으로 밝혀졌습니다.