2010-07-11 2 views
4

저는 ASP.Net + .Net 3.5 + VSTS 2008 + IIS 7.0 + C#을 사용하여 웹 응용 프로그램을 개발하고 있습니다. 아주 간단한 웹 응용 프로그램을 만들고 있는데, 방금 page_load, Session_Start 및 Session_End를 수정했습니다. 여기에 내 코드가있다, 내 질문은 세션 종료 메시지가 세션 시작 메시지 바로 다음에 파일에 기록된다는 것을 알게된다. 내 테스트 방법은 IE를 열어이 페이지에 액세스하는 것입니다. 나는 세션이 몇 분과 같이 오랫동안 지속되어야한다고 생각한다. 세션이 이렇게 빨리 끝나는 이유는 무엇입니까? 왜 내가 페이지를 닫지 않았어도 해고가 끝나는 이유는 무엇입니까? ASP.Net 세션 시작 및 종료 문제

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Write("Hello World! "); 
    Session["SomeUserData"] = DateTime.Now; 
} 

protected void Session_Start(object sender, EventArgs e) 
{ 
    using (TextWriter tw = new StreamWriter(@"C:\TestSession\bin\session.txt", true)) 
    { 
     // write a line of text to the file 
     tw.WriteLine(DateTime.Now + " Session Started."); 
    } 
} 

protected void Session_End(object sender, EventArgs e) 
{ 
    using (TextWriter tw = new StreamWriter(@"C:\TestSession\bin\session.txt", true)) 
    { 
     // write a line of text to the file 
     tw.WriteLine(DateTime.Now + " Session Ended."); 
    } 
} 

내가를 Page_Load 방법으로 세션 조작 코드를 추가 할 경우에도 같은 문제를 만났다, 여기 이벤트는 세션 시작 직후라고 끝 당신이 세션을 볼 수있는, 출력 파일 내용입니다. 사전에

2010/7/15 0:11:14 Session Started. 
2010/7/15 0:11:14 Session Ended. 
2010/7/15 0:11:28 Session Started. 
2010/7/15 0:11:28 Session Ended. 

덕분에, 조지

+1

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end.aspx –

+0

이 링크에서 무엇을 증명하고 싶습니까? – George2

답변

8

올바르게 기억한다면 실제로 활성화하려면 세션에 무엇인가를 할당해야합니다. 그렇지 않으면 ASP.NET은 매번 새로운 세션 (피들러를 사용하면 새 세션 ID)을 다시 생성합니다.

EDIT : session.txt가 bin 디렉토리 안에 있기 때문에. bin 디렉토리에 쓰면 응용 프로그램이 다시 시작되어 Session_End 이벤트가 즉시 시작됩니다. session.txt를 bin 디렉토리에서 다른 곳으로 이동하면 문제가 해결됩니다.

+0

"세션을 활성화하려면 실제로 뭔가를 할당해야합니다." - 어떻게 보여줄 수 있겠 어? – George2

+1

예를 들어 세션 변수를 설정하는 중입니다. 세션 [ "UserData"] = "사용자 데이터"; 코드가 세션에 아무 것도 쓰지 않으면 ASP.NET은 실제로 세션을 유지하지 않습니다. – airmanx86

+1

이 세션과 같이 한 줄 더 추가하려고 시도하십시오 [ "UserData"] = "userdata"; Page_Load 이벤트로 이동하여 현재 작동하는지 확인하십시오. – airmanx86

2

행동의이 종류는 때때로 지나치게 안티 바이러스 프로그램에 의해 발생합니다. 안티 바이러스를 비활성화하고 도움이되는지 확인하십시오. 도움이 되었다면 사이트의 디렉토리를 제외 목록에 추가하십시오.

또한 브라우저를 닫은 후에도 세션에 어떤 영향도주지 않습니다.

+0

브라우저 종료는 곧바로 세션 종료를 의미하지 않습니다 (즉, Session_End가 서버 측에서 즉시 호출되지 않음을 의미)? 왜? – George2

+1

세션 종료는 세션 자체가 시간 초과되거나 Session.Abandon()을 호출하여 강제 종료 될 때만 트리거됩니다. 일반적으로 서버는 브라우저가 닫혔다는 사실을 모릅니다 (브라우저가 닫히고 모든 시나리오에서 작동하지 않을 때 서버에 전화를 걸기위한 복잡한 자바 스크립트가없는 경우). 이것이 세션에 타임 아웃이있어 영원히 살지 않는 이유입니다. –

+0

회신을 이해하지만 회신하지 않습니다. :-) 샘플에서 세션 시작 직후 세션 끝이 호출되는 이유는 무엇입니까? – George2