다음을 통해 공유


세션 상태 이벤트

업데이트: 2007년 11월

ASP.NET에서는 사용자 세션을 관리하는 데 유용한 두 개의 이벤트를 제공합니다. Session_OnStart 이벤트는 새 세션이 시작될 때 발생하고, Session_OnEnd 이벤트는 세션이 중단되거나 만료될 때 발생합니다.

참고:

ASP.NET 응용 프로그램의 Global.asax 파일이나 Web.config 파일이 수정되면 해당 응용 프로그램이 다시 시작됩니다. 이 때 현재 세션 상태 모드가 InProc면 응용 프로그램 상태나 세션 상태에 저장된 모든 값을 잃게 됩니다. 일부 바이러스 백신 프로그램에서는 응용 프로그램의 Global.asax 또는 Web.config 파일에 대한 마지막 수정 날짜 및 시간을 업데이트할 수 있으므로 주의해야 합니다. 세션 상태 모드 설정에 대한 자세한 내용은 세션 상태 모드를 참조하십시오.

Session_OnStart 이벤트

Global.asax 파일에 Session_OnStart 서브루틴을 추가하여 Session_OnStart 이벤트를 처리할 수 있습니다. Session_OnStart 서브루틴은 요청이 새 세션을 시작하는 경우 요청이 시작될 때 실행됩니다. 새 세션이 시작되는 경우는 요청에 SessionID 값이 포함되지 않거나 요청에 포함된 SessionID 속성이 만료된 세션을 참조하는 경우입니다.

Session_OnStart 이벤트를 사용하여 세션 변수를 초기화하고 세션 관련 정보를 추적할 수 있습니다.

Session_OnEnd 이벤트

Global.asax 파일에 Session_OnEnd 서브루틴을 추가하여 Session_OnEnd 이벤트를 처리할 수 있습니다. Session_OnEnd 서브루틴은 Abandon 메서드가 호출되었거나 세션이 만료된 경우에 실행됩니다. 세션이 만료되는 경우는 세션을 요청하지 않은 상태에서 Timeout 속성에 지정된 시간(분)이 경과하는 경우입니다.

Session_OnEnd 이벤트는 세션 상태 Mode 속성이 기본값인 InProc로 설정된 경우에만 지원됩니다. 세션 상태 ModeStateServer 또는 SQLServer인 경우에는 Global.asax 파일의 Session_OnEnd 이벤트가 무시됩니다. 세션 상태 ModeCustom으로 설정되어 있으면 사용자 지정 세션 상태 저장소 공급자에 따라 Session_OnEnd 이벤트의 지원 여부가 결정됩니다.

Session_OnEnd 이벤트를 사용하여 데이터 소스에서 SessionID 값으로 추적된 사용자에 대한 정보 등의 세션 관련 정보를 정리할 수 있습니다.

세션 이벤트 예제

다음 코드 예제에서는 Global.asax 파일에 추가할 수 있는 Session_OnStart 및 Session_OnEnd 서브루틴의 샘플을 보여 줍니다. 이 예제에 정의된 서브루틴은 응용 프로그램을 실제로 사용하고 있는 사용자의 수를 추적하는 카운터를 만듭니다. Session_OnEnd 이벤트는 in-process 세션 상태 저장소에 대해서만 지원되므로 이 예제는 세션 상태 Mode 속성이 InProc로 설정되어 있는 경우에만 올바르게 작동합니다.

<script language="VB" >
Public Sub Application_OnStart()
  Application("UsersOnline") = 0
End Sub

Public Sub Session_OnStart()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) + 1
  Application.UnLock()
End Sub

Public Sub Session_OnEnd()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) - 1
  Application.UnLock()
End Sub
</script>
<script language="C#" >
public void Application_OnStart()
{
  Application["UsersOnline"] = 0;
}

public void Session_OnStart()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
  Application.UnLock();
}

public void Session_OnEnd()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
  Application.UnLock();
}
</script>

참고 항목

개념

ASP.NET 세션 상태 개요

ASP.NET 상태 관리 개요