2014-03-25 5 views
0

나는 모든 페이지 뷰에서 가능한 한 빨리 호출되도록하고 싶습니다. 이 코드는 사용자 IP 주소를 가져 오며 데이터베이스에서 카운터를 1 씩 증가시킵니다.페이지 뷰를 잡을 수있는 가장 빠른 기회

이 코드는 기본 범람 한계 값입니다. x 개 이상의 요청이 i 간격으로 이루어진 경우 일시적으로 해당 IP 주소를 금지합니다. 이것이 수표가 가능한 한 빨리 모든 페이지에 있어야하는 이유입니다. MasterPages 후 Page_Init

이 확인을 작동하는 것 같다에서 호출

그러나 때로는 1 개 이상 (나는 URL 다시 쓰기가 있다면 가정 또는 리디렉션)에 의해 카운터는 증가합니다. 으로 session_start에 Global.asax에의 호출

는 각 페이지 뷰 카운터에 ~30을 추가 할 것으로 보인다.

페이지보기를 가능한 한 빨리 잡을 수있는 가장 좋은 방법은 무엇입니까? 사이트의 모든 단일 페이지를 바꿀 필요가없는 것이 좋습니다.

ASP.NET 가 응답 실행의 HTTP 파이프 라인 체인의 첫 번째 이벤트 요청

이을에게 :

답변

2

내부 Global.asax에, 당신은 인 HttpApplication.BeginRequest에 연결할 수 있습니다 각 요청 (이미지, CSS, 자바 스크립트 등)에 대해 실행됩니다. 페이지 만 필터링하려면 요청 확장에 따라 카운터를 증가시키는 HttpModule을 작성할 수 있습니다.

+0

이 파일을 global.asax 파일에 추가하면 한 페이지 뷰가이 이벤트를 30-50 번 실행하는 것으로 보입니다. –

+0

각 페이지마다 이미지, 자바 스크립트, CSS 파일 등과 같은 수많은 소스가 있기 때문입니다. – mathieu

1

Page_Initthe earliest event you can subscribe to in WebForms이므로 가야합니다.

때때로 카운터가 1 이상으로 증가합니다 (URL이 다시 작성되거나 리디렉션되는 경우 가정합니다).

어떻게 문제입니까? 리디렉션 다음에 다른 요청이 있으므로 다른 요청입니다. 이들을 제외하려면 응답에서 리디렉션을 수행할지 여부를 최신 이벤트 (WebForms의 경우 Page_Unload)에 체크인해야하며, 그렇다면 원하는 결과 인 경우 카운터에서 1을 뺍니다.

휠을 다시 만들지 않으려면 Best way to implement request throttling in ASP.NET MVC?을 참조하십시오. @의 매튜의 대답은 당으로

, 당신은 HttpApplication.EndRequestHttpApplication.BeginRequestPage_UnloadPage_Init를 교환 할 수 있으며, 웹폼의이 독립하기 위해, 같은 논리를 수행합니다. Global.asax에서 이러한 이벤트를 연결할 수 있습니다.