ASP.NET 응용 프로그램 파일이라고도 하는 Global.asax 파일은 응용 프로그램 수준 또는 모듈 수준 이벤트에 응답하기 위한 중앙 위치를 제공합니다. 이 파일을 사용하여 애플리케이션 보안 및 기타 작업을 구현할 수 있습니다.
Global.asax 파일은 URL을 통한 직접적인 HTTP 요청이 자동으로 거부되도록 구성되어 있으므로 사용자는 해당 내용을 다운로드하거나 볼 수 없습니다. ASP.NET 페이지 프레임워크는 Global.asax 파일에 대한 모든 변경 사항을 자동으로 인식합니다. ASP.NET 페이지 프레임워크는 Global.asax가 변경된 후 애플리케이션을 다시 시작합니다. 여기에는 모든 브라우저 세션 닫기, 모든 상태 정보 제거 및 애플리케이션 도메인 다시 시작이 포함됩니다.
Global.asax 파일은 HttpApplication 개체 풀을 유지 관리하고 필요할 때 풀의 개체를 응용 프로그램에 할당하는 HttpApplication 클래스에서 상속됩니다. Global.asax 파일에는 다음 이벤트가 포함되어 있습니다.
· Application_Init: 이 이벤트는 응용 프로그램이 처음으로 인스턴스화되거나 호출될 때 트리거됩니다. 모든 HttpApplication 개체 인스턴스에 대해 호출됩니다.
· Application_Disposed: 애플리케이션이 삭제되기 전에 트리거됩니다. 이는 이전에 사용한 리소스를 정리하기에 이상적인 장소입니다.
· Application_Error: 이 이벤트는 응용 프로그램에서 처리되지 않은 예외가 발생할 때 트리거됩니다.
· Application_Start: 이 이벤트는 HttpApplication 클래스의 첫 번째 인스턴스가 생성될 때 트리거됩니다. 이를 통해 모든 HttpApplication 인스턴스에서 액세스할 수 있는 개체를 만들 수 있습니다.
· Application_End: 이 이벤트는 HttpApplication 클래스의 마지막 인스턴스가 소멸될 때 트리거됩니다. 애플리케이션 수명 동안 한 번만 트리거됩니다.
· Application_BeginRequest: 애플리케이션 요청이 수신되면 트리거됩니다. 요청의 경우 요청은 일반적으로 사용자가 입력한 페이지 요청(URL)으로 트리거됩니다.
· Application_EndRequest: 애플리케이션이 요청한 마지막 이벤트입니다.
· Application_PreRequestHandlerExecute: 이 이벤트는 ASP.NET 페이지 프레임워크가 페이지나 웹 서비스와 같은 이벤트 처리기 실행을 시작하기 전에 트리거됩니다.
· Application_PostRequestHandlerExecute: 이 이벤트는 ASP.NET 페이지 프레임워크가 이벤트 처리기 실행을 종료할 때 트리거됩니다.
· Applcation_PreSendRequestHeaders: 이 이벤트는 ASP.NET 페이지 프레임워크가 요청 클라이언트(브라우저)에 HTTP 헤더를 보낼 때 트리거됩니다.
· Application_PreSendContent: 이 이벤트는 ASP.NET 페이지 프레임워크가 요청 클라이언트(브라우저)에 콘텐츠를 보낼 때 트리거됩니다.
· Application_AcquireRequestState: 이 이벤트는 ASP.NET 페이지 프레임워크가 현재 요청과 관련된 현재 상태(세션 상태)를 얻을 때 트리거됩니다.
· Application_ReleaseRequestState: 이 이벤트는 ASP.NET 페이지 프레임워크가 모든 이벤트 처리기 실행을 완료하면 트리거됩니다. 이렇게 하면 모든 상태 모듈이 현재 상태 데이터를 저장하게 됩니다.
· Application_ResolveRequestCache: 이 이벤트는 ASP.NET 페이지 프레임워크가 인증 요청을 완료할 때 트리거됩니다. 이를 통해 캐시 모듈이 캐시의 요청을 처리할 수 있으므로 이벤트 핸들러의 실행을 우회할 수 있습니다.
· Application_UpdateRequestCache: 이 이벤트는 ASP.NET 페이지 프레임워크가 이벤트 처리기의 실행을 완료할 때 트리거되어 캐시 모듈이 후속 요청에 응답하는 데 사용할 응답 데이터를 저장할 수 있도록 합니다.
· Application_AuthenticateRequest: 이 이벤트는 보안 모듈이 현재 사용자에 대해 유효한 ID를 설정할 때 트리거됩니다. 이때 사용자의 자격 증명이 확인됩니다.
· Application_AuthorizeRequest: 이 이벤트는 보안 모듈이 사용자가 리소스에 액세스할 수 있음을 확인할 때 트리거됩니다.
· Session_Start: 이 이벤트는 새 사용자가 응용 프로그램 웹 사이트에 액세스할 때 트리거됩니다.
· Session_End: 이 이벤트는 사용자의 세션이 시간 초과되거나 종료되거나 응용 프로그램 웹 사이트를 떠날 때 트리거됩니다.
이러한 이벤트를 사용할 때 중요한 문제는 이벤트가 실행되는 순서를 아는 것입니다. Application_Init 및 Application_Start 이벤트는 애플리케이션이 처음 시작될 때 한 번 실행됩니다. 마찬가지로, Application_Disposed 및 Application_End 이벤트는 응용 프로그램이 종료될 때 한 번 실행됩니다. 또한 세션 기반 이벤트(Session_Start 및 Session_End)는 사용자가 사이트에 들어오고 나갈 때만 사용됩니다.
나머지 이벤트는
응용
프로그램요청
을 처리합니다
. 이러한 이벤트가 트리거 된 순서는 다음과 같습니다.
>>
·
Application_PostRequestHandlerExeCute
·
Application_ReleaseRequestState
·
Application_UPDATEREQUESTCACHE
· Application_EndRequest
이
이벤트 보안 목적으로 자주 사용됩니다. 다음 C# 예제에서는 Application_Authenticate 이벤트를 사용하여 쿠키를 통해 양식 기반 인증을 완료하는 다양한 Global.asax 이벤트를 보여줍니다. 또한 Application_Start 이벤트는 애플리케이션 변수를 채우고 Session_Start는 세션 변수를 채웁니다. Application_Error 이벤트는 발생한 오류를 설명하는 간단한 메시지를 표시합니다.
protected void Application_Start(객체 전송자, EventArgs e) {
Application["Title"] = "Builder.com 샘플";
}
protected void Session_Start(객체 전송자, EventArgs e) {
세션["startValue"] = 0;
}
protected void Application_AuthenticateRequest(객체 전송자, EventArgs e) {
//양식 인증 쿠키 추출
문자열 cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if(null == authCookie) {
// 인증 쿠키가 없습니다.
반품;
}
FormsAuthenticationTicket authTicket = null;
노력하다 {
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
} catch(예외예외) {
// 예외 세부 정보 기록(간결함을 위해 생략됨)
반품;
}
if (null == authTicket) {
// 쿠키의 암호 해독에 실패했습니다.
반품;
}
// 티켓이 생성될 때 UserData 속성이 할당되었습니다.
// 파이프로 구분된 역할 이름 문자열입니다.
문자열[2] 역할
역할[0] = "1개"
역할[1] = "2개"
// ID 객체 생성
FormsIdentity id = new FormsIdentity( authTicket );
// 이 주체는 요청 전반에 걸쳐 흐릅니다.
GenericPrincipal 주체 = new GenericPrincipal(id, 역할);
// 새 주체 개체를 현재 HttpContext 개체에 연결합니다.
Context.User = 주체;
}
protected void Application_Error(객체 전송자, EventArgs e) {
Response.Write("오류가 발생했습니다.");
}
http://www.cnblogs.com/niit007/archive/2006/08/13/475565.html