하는 코드 :왜 세션 쓰기가 스레드 종료에 취약합니까?
Session["foo"] = "bar";
Response.Redirect("foo.aspx");
인한 문제 : foo.aspx 세션에서 "foo는"읽을 때
, 거기 아니다. 세션이 있지만 "foo"에 대한 가치는 없습니다.
나는 이것을 우리의 생산 환경에서 간헐적으로 관찰했다. 그러나 나는 여기에 묻기를 의미하지는 않습니다. a question about Response.Redirect().
설명:
Bertrand Le Roy는 설명합니다 (굵은 글자는 내 꺼야) :
자, 리디렉션가하는 것은 서버에 요청 있도록 클라이언트에 특별한 헤더를 보내는 것입니다 대기중인 것보다 다른 페이지에 대해 서버 쪽에서이 헤더를 보낸 후 Redirect가 응답을 종료합니다. 이것은 매우 폭력적인 일입니다. Response.End는 실제로 인 페이지의 실행을 ThreadAbortException을 사용하여 중지합니다. 어떤 이 실제로 여기에서 발생하는 것은 세션 토큰이 전투에서을 잃어 버리게된다는 것입니다.
나의 테이크 어웨이는 Response.Redirect()가 엔딩 스레드로 무거워 질 수 있습니다. 그리고 그것은 그 무거운 힘에 너무 가까워지면 내 세션 기록을 위협 할 수 있습니다.
질문 :
무엇 ASP.NET에 대한 세션 관리는 이것에 너무 취약 하죠? Response.Redirect() 코드 줄은 세션 쓰기 줄이 "완료"될 때까지 실행을 시작하지 않습니다. 세션 쓰기에 대한 위협이 될 수있는 방법은 무엇입니까?
다음 코드 줄이 실행되기 전에 세션 쓰기가 "완료"되지 않습니다. 세션 쓰기가 (결코 발생하지 않았던 것처럼) 손실되는 다른 시나리오가 있습니까?