Global.asa

    Session_OnEnd 이벤트는 버그 라이프(?)

    Session_OnEnd 이벤트에서 Response.Redirect나, Server.MapPath 등의 메쏘드는 동작하지 않습니다. 사실 Session_OnEnd 이벤트는 Request, Response,Server  객체를 지원하지 않죠. 오직 애플리케이션, 세션 객체만을 지원합니다. 따라서 Server.MapPath()를 사용해 파일 경로를 얻어와 Session_OnEnd 이벤트에서 어떤 처리를 해줄 경우에는 반드시 세션이 끝나기 전에 파일의 경로를 얻어와 애플리케이션변수에 저장해 두는 것이 좋습니다. 그렇지 않고 Session_OnEnd 에서 Server.MapPath를 통해 얻어온 파일의 경로로 작업을 한다면 그 결과를 장담할 수가 없죠.

    상당히 엄청난(?) 버그인데요. Session_OnEnd 이벤트는 사실 그 이벤트가 100% 발생할 것이라는 것을 믿을 수가 없습니다. 이 버그는 아직까지 해결되지 않은 알려진 버그중에 하나로서 가능하면 Session_OnEnd에서는 중요한 처리를 하지 말기를 추천합니다.

    Global.asa 사용시 주의할 점

    - 웹애플리케이션의 루트에 존재해야 한다.
    - Global.asa 파일 이름을 바꿔 사용할 수 없다.
    - 파일 수정시에는 반드시 웹서버를 재시작 해야한다.
    - ASP 내장 객체를 모두 사용할 수 있는 것은 아니다.

    Global.asa 이벤트는 ASP 페이지가 요청될 경우 호출

    사용자가 사이트에 접속해 htm 페이지를 요청해도 Global.asa의 Session_OnStart 이벤트는 동작하지 않습니다. 그러므로 Session_OnStart에서의 리다이렉트(Redirect)를 통한 페이지 이동은 사이트에 처음 접속할 경우 반드시 발생하는 것은 아닙니다. 사이트 내에서 처음 ASP 페이지를 호출할 경우에 발생하게 됩니다.

    예를 들면, 사이트의 기본 문서가 default.htm으로 지정돼 있고, 우리가 Session_OnStart 이벤트에 리다이렉트 'main.htm'을 지정했다고 가정하죠. 사용자가 http://www.A.com으 로 여러분의 사이트를 접속할 경우 여러분은 자동으로 main.htm 페이지가 로딩될 것이라고 생각할 수 있지만, 사실은 그렇지 않습니다. 사이트에 처음 입장하더라도 htm 페이지가 요구되면 Global.asa는 동작하지 않으며 default.htm이 사용자에게 로딩됩니다. 만일, 여러분이 default.asp 페이지를 기본문서로 지정한다면 그 때에는 제대로 동작하겠죠.

    Posted by 부니기