2011-01-04 6 views
1

사용자가 페이지를 닫은 후에 서버에서 임시 파일을 제거하려고합니다 (서버에서이 콜백이 기본적으로 없다고 가정 함),사용자가 페이지를 닫을 때 서버 메서드를 호출하는 방법

사용자가 페이지를 닫을 때 (ICallbackEventHandler 구현을 사용하여) 서버 쪽 메서드를 호출하려고 시도했지만 문제는 서버 쪽 메서드가이 경우 (페이지를 닫는 경우) 실행되지 않는다는 것입니다. 페이지가 여전히 열렸습니다. 서버 응답이 끝날 때까지 페이지를 닫지 않고 페이지를 수동으로 닫기 위해 콜을 다시 보내는 것을 선호하지 않습니다.

페이지를 닫지 않아도되는 경우에는 친절하게 도와주세요.

미리 감사드립니다.

답변

3

최근 액세스 한 시간대에 24 시간 후에 파일을 삭제하는 것이 더 신중할 것 같습니다. 즉, 24 시간 안에 건드리지 않은 모든 파일이 삭제됩니다.

또는 AJAX를 사용하여 폴링 할 수 있으며, 일정 시간 동안 threshhold> 폴링 간격 내에 사용자의 식별 토큰이 포함 된 요청을받지 않는 즉시 관련 파일을 삭제하십시오.

+0

AJAX 폴링에 대한 좋은 아이디어. :) –

+0

아약스 풀링이나 링크에 대해 더 많은 정보를 제공 할 수 있는지 궁금합니다. 인터넷에서 많은 것을 발견하지 못했습니다. – Homam

+0

정말 그렇게 어렵지는 않습니다. 아마 당신이하려는 일에 총을 들고 있다고 생각해. 본질적으로 어떤 종류의 액션/컨트롤러/프레임 워크 클래스/메소드로 전달하고 사용자의 인증 토큰을 꺼내서 해당 사용자와 관련된 파일을 타임 스탬프로 계속 표시하거나 문자 그대로 'touch'하면 해당 웹 URL을 누르십시오. 파일. 다른 서비스가 일부 타이머 (사용자의 필요에 따라 그 간격이 다를 수 있음)에서 실행되도록하고 일정 기간 동안 접촉하지 않은 모든 파일을 지우십시오. –

4

언제 사용자가 페이지를 닫을 지 알 수 없습니다.

가 당신이 JS onunload 이벤트를 사용 달성하고 거기에 AJAX 요청을 보낼 수있는 최고의

:

<body onunload="SendRequest();"> 

그리고 자바 스크립트 (jQuery를이 방법이 가장 간단합니다)

function SendRequest() 
{ 
    var sURL = "http://localhost/Log.aspx?action=unload&t=" + (new Date()).getTime(); 
    $.ajax({ url: sURL }); 
} 

이 이벤트는 것 사용자가 페이지에서 이동할 때마다 트리거됩니다 : F5, 뒤로, 앞으로, 링크 클릭, 양식 제출 등 ... 페이지에서 무언가를 클릭하는 것과 같은 경우 무시하도록 코드를 향상시킬 수 있습니다. 적절한 코드로

0

첫 번째 작업과 비슷한 상황에서 서버에 복사본을 남겨 뒀고 그 임시 디렉터리가 해당 페이지에서 다시 호출 될 때마다 72 시간이 지난 파일을 삭제했습니다. 별로 좋지는 않지만 그 상황에서 받아 들여졌습니다.

사용자가 더 이상 필요하지 않다는 것을 알고있을 때 서버에서 삭제해야하는 경우 세션 수신기를 사용할 수 있습니다 (this question 참조).

관련 문제