2011-01-13 8 views
2

사용자가 ASP.NET에서 페이지를 떠날 때 항상 서버 측 코드를 실행하는 방법이 있는지 궁금합니다. 페이지 언로드 이벤트는 누군가가 링크를 클릭하면 호출되지 않기 때문에 좋지 않습니다. 이상적으로는 사용자가 브라우저를 닫더라도 코드를 실행하고 싶습니다.사용자가 페이지를 떠날 때 ASP.NET을 사용하여 항상 일부 서버 측 코드를 실행하는 방법이 있습니까?

나는 내가 부탁 해요 것은 불가능하다 생각하지만, 그것은 내가 알고하지 않는 것이

+0

자바 스크립트 'unbeforeunload' 만 얻을 수있는 기회입니다. 모든 브라우저가 같은 방식으로 구현하지는 않습니다. –

답변

2

문제는 HTTP는 상태 비 저장 프로토콜이므로 페이지 제공이 끝나면 사용자가 아직 페이지에 있는지 여부를 알 수 없습니다.

이 작업을 수행하는 유일한 방법은 숨겨진 Javascript로 세션 ID 또는 다른 유사한 메커니즘으로 서버를 지속적으로 핑합니다. ping이 응답하지 않으면 사용자가 페이지를 더 이상 볼 수 없다고 합리적으로 추측 할 수 있습니다.

다음은 일반적인 HTTP 메시지 흐름을 설명하는 다이어그램입니다. 당신이 그렇게 할 수 있지만 내가 마음에 해결 방법이있는 경우

alt text

0

을 물어 다치게하지 않습니다. 이를 위해 자바 스크립트를 사용하고 서버 측에서 웹 서비스를 호출해야합니다.

2

메신저 정말 확실하지 않다. onbeforeunload라는 DOM에 이벤트가 있습니다. 사용자가 페이지를 떠날 때마다 전화를받습니다. 이 함수를 사용하여 서버에 ajax 요청을 보낼 수 있습니다.

1

솔루션을 너무 복잡하게 만들지 않고도 가장 가까운 것은 ASP 세션을 활성화하는 것입니다. 이렇게하면 각 방문자에 대해 쿠키로 식별되는 세션이 서버에서 생성됩니다.

방문자가 일정량 활동하지 않으면 세션이 닫히고 SessionEnd 이벤트가 발생합니다. 이것은 Global.asax 파일에 연결할 수 있습니다.

그러나 HTTP는 pr이므로이 방법을 사용하지 않는 것이 좋습니다. 세션 기반 프로토콜을 정의하고 서버 기반 세션을 사용하면이 사실을 위반하고 종종 문제가됩니다. 서버 기반 세션을 사용하는 많은 솔루션은 사용자가 브라우저 뒤로 단추를 사용하여 문제를 일으키고 양식을 다시 제출합니다. 제출 된 양식의 내용이 더 이상 서버 세션에있는 데이터와 일치하지 않기 때문입니다.

또한 서버 기반 세션을 활성화하면 응용 프로그램의 확장 성이 심각하게 손상 될 수 있습니다.