2011-01-20 2 views
0

이상한 문제이며 무슨 일이 일어나고 있는지 확실하지 않습니다. IIS7과 .net 4.0을 사용하고 있습니다.브라우저 창이 닫히면 Asp.Net 세션 변수가 포기되지 않습니까?

브라우저를 닫은 후에도 세션 쿠키가 클라이언트에 남아 있지 않은 것처럼 보였습니다. 또 다른 이상한 점은 IE를 닫고 FireFox를 열 수 있으며 세션도 거기에 있다는 것입니다. 방법 것입니다? 내 환경이 어떻게 설정되는지 생각 중입니다. InProc 세션을 IIS에서 쿠키를 사용하도록 설정했습니다. IIS7과 다른 점은 무엇입니까?

업데이트 : 내 응용 프로그램 풀에 통합 모드를 사용하고 있습니다. Sever2003에서 실행되는 .net 3.5 및 iis6을 사용하여 만든 이전 사이트를 살펴 보았습니다. 사이트에 로그인 할 수 있으며 세션 변수가 생성됩니다. 그런 다음 FireFox에 가서 동일한 사이트를 엽니 다. 로그인이 필요합니다 (세션이 존재하면 내 응용 프로그램이 사용자의 prfile로 연결됩니다). 그런 다음 IE를 닫고 IE를 다시 연 다음 내 사이트로 돌아 가면 다시 로그인해야합니다. iis7과 현재 사용중인 응용 프로그램에서 일어나는 일은 아주 이상합니다. 내 세션을 가져 오는 방법의 유일한 차이점은 현재 처리기를 Page 개체에 캐스팅하는 동안 변수를 가져 오는 것입니다. (페이지) HttpContext.Current.Handler

업데이트 : 글쎄, 문제가있는 곳을 찾은 것 같아요. HttpContext.Current.Handler를 현재 페이지 객체로 캐스팅하는 것과 관련이 있습니다. 다른 모든 클래스가 내가 만든 User 세션 객체를 얻기 위해 중앙 지점을 참조 할 수 있도록 속성을 배치하려는 구성 파일이 있습니다. HttpContext.Current.session은 항상 null이며 누군가 HttpContext.Current.Handler를 형변환하도록 제안했습니다. 나는 세션 varaible이 만들어 졌는지 아닌지 확인하는 간단한 페이지를 만들었다. 그런 다음 그 가치를 인쇄합니다. 브라우저를 종료하면 세션이 종료됩니다. 그래서, 그것은 효과가 있습니다. 원래이 메시지에 포함 된 코드는 뒤로 버튼 용 이었지만 Andrew가이를 지적 해 주셔서 감사합니다. 그래서 나는 Hnadler에서 가져온 세션이 왜 speicifcally clear 할 때까지 항상 사용 가능한지 명확하지 않다.

+5

해당 코드는 쿠키 또는 세션과 관련이 없습니다. –

+0

내가 아는 한, 나는 모든 sated 쿠키가 클라이언트에 머무르는 것을 유지하는 것이 었습니다. – DDiVita

+0

앞서 언급했듯이이 코드는 쿠키 나 세션과는 전혀 관련이 없습니다. 이 질문에 완전히 무의미하며 제거해야합니다. –

답변

0

글쎄, 나는 HttpContext.Current.Handler 항상 내 세션을 붙잡고 이유를 확실하지 아직 이에 대한 대답을 얻었다 결코. 그래서, 나는 Session 변수를 어떻게 설정하고 가져 왔는지를 바꾸었다. 모두를 보아 주셔서 감사합니다.

3

지정된 시간 동안 사용하지 않으면 세션이 종료됩니다 (기본값 20 분). Http는 상태를 유지하지 않으므로 서버는 브라우저를 열어 놓은 사람과 다를 수는 없지만 브라우저 창을 닫은 사람의 요청은 보내지 않습니다.

Session_OnEnd는 InProc 세션 상태에서만 트리거됩니다. IE와 Firefox가 세션을 공유하는 유일한 방법은 세션 id가 url에 내장 된 cookieless 세션이며 브라우저간에 url을 복사하는 것입니다.

+0

나는 그것을 깨닫는다. 그러나 나를 믿어라, 사이트는 프로세스에서 설정되었고 나는 URL에서 아무것도 전달하지 않는다. – DDiVita

+0

@DDiVita - 당신이 말한 것이 사실이라면 세션 상태가 유지되는 것에 착각해야합니다. Cognitronic이 WebForm 페이지에 게시 한 코드를 찾아보고 찾아보십시오. 세션 상태가 취소되었는지 확인하십시오. 그렇지 않다면 ASP.NET의 '세션'상태에 대해 이야기하는 것이 아닙니다. –

+0

시스템에서 로그 아웃하고 Session.Abandon을 호출하면 세션이 지워집니다. 두 브라우저에서. 그래서, 로그 아웃 이벤트에서 Session을 호출합니다.IE 내에서 포기. FF로 들어가서 새로 고침하면 로그인 페이지로 되돌아갑니다. 그래서 세션은 이상한 일이 아닙니다. 나는 단지 그것을 얻지 않는다. – DDiVita

1

하면 세션을 취소하려면이 옵션을보십시오 :

HttpContext.Current.Session.Clear(); 
HttpContext.Current.Response.Cookies.Clear(); 
+0

해당 코드가 작동하는 동안이 코드를 호출 할 수있는 컨텍스트가 없으므로이 질문에 도움이되지 않을 수 있습니다. 그는 명시 적으로 호출되는 코드를 포함하지 않는 세션 포기에 대해 이야기합니다. **하지만 **이 코드는 처음에 문제가되는 세션 상태인지 확인하는 데 도움이 될 수 있습니다 (코드가이를 지우지 않으면 '세션'이 아닙니다). –

관련 문제