>  기사  >  웹 프론트엔드  >  IE 창을 닫고 Session_javascript 기술을 지우는 솔루션

IE 창을 닫고 Session_javascript 기술을 지우는 솔루션

WBOY
WBOY원래의
2016-05-16 17:04:351538검색

코드 복사 코드는 다음과 같습니다.

//function window.onunload() { Alert(' 이렇게 해야 합니다. 웹페이지를 닫으세요! '); location = 'SessionClear.aspx'; }
//function window.onbeforeunload() { Alert('해야 할 일은 다음과 같습니다. , 닫기 이전에 페이지가 만들어졌습니다!') }

함수 window.onunload() {

" // 사용자가 비정상적으로 닫혔을 때 실행되어야 하는 액션

Location = 'Handler1.ashx';
}
}


Handler1.ashx:



System.Collections.Generic 사용;
System.Linq 사용;
System.Web 사용;
System.Web.Services 사용 ;
System.Web.SessionState 사용;

네임스페이스 WebApplication1
{ ///

/// $codebehindclassname$
에 대한 요약 설명 ///


[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
공용 클래스 Handler1: IHttpHandler,IRequiresSessionState
{

public void ProcessRequest(HttpContext context)
{

context.Response.ContentType = "text/plain";

context.Session.Abandon();
Session.Clear() ;
}

public bool IsReusable
{

get

{
return false;
}
}
}
}


설명 :

일반 회원제 웹사이트는 회원이 로그인한 후 세션이나 쿠키를 설정하며, 회원이 탈퇴하려면 탈퇴 링크나 버튼을 클릭해야 합니다. 회원이 직접 양식을 닫는 경우 종료와 관련된 일련의 종료가 실행되지 않습니다. 이는 서버 세션이 만료될 때까지 지워지지 않습니다.
다행히도 사용자가 Alt F4를 사용할 때, 제목 표시줄을 마우스 오른쪽 버튼으로 클릭하여 닫을 때, 제목 표시줄을 두 번 클릭할 때, 또는 직접 닫기 버튼을 누를 때 이벤트를 캡처할 수 있는 방법을 인터넷에서 마침내 찾았습니다. 물론 작업 표시줄로 최소화했다가 닫는 것은 캡쳐할 수 없습니다.


코드 복사 코드는 다음과 같습니다.
지침:
window.screenLeft = 10000 테두리 너비(2×2) = 10004
window.screenTop = 10000 도구 모음 높이 제목 표시줄 높이 = 10097

onBeforeUnload에서는 화면의 이러한 좌표 속성이 일반 값이라는 점에 유의해야 합니다.

screenLeft: 화면 왼쪽 위 모서리를 기준으로 브라우저 클라이언트 영역 왼쪽 위 모서리의 x 좌표를 가져옵니다.

screenTop: 화면 왼쪽 상단을 기준으로 브라우저 클라이언트 영역 왼쪽 상단의 y 좌표를 가져옵니다.

형태가 소멸되면 특별한 값이 생성될 것 같아요. 일반적인 상황의 클릭 테스트에서는 값이 이 값을 초과하지 않습니다.

이제 문제는 onBeforeUnload에서 window.location을 사용하면 지정된 URL에 정상적으로 요청을 제출할 수 있지만 onUnload 이벤트에서는 이 메서드를 효과적으로 실행할 수 없다는 것입니다. 해결책은 새 창을 열고 닫는 것입니다.

과거에 사용된 일련의 window.locations를 대체하기 위해 이와 같은 내용을 작성할 수 있습니다. 포털에는 여러 서버 간 웹 사이트 서버가 포함되어 있기 때문입니다. 통합출입구에서 퇴장하신 후 순차적으로 퇴실하셔야 포털사이트에서 원하는 효과를 얻으실 수 있습니다.

var newWindow;
window.opener=null;
newWindow=window.open(URL,PageName, 'height=0,width=0')
newWindow.opener=null; >newWindow.close()

이 코드는 테스트되었습니다. 객체가 소멸되기 직전에 이벤트가 트리거되므로 onUnload에서 window.close를 사용하지 마세요. onBeforeUnload는 페이지가 언로드되기 전에 트리거되는 이벤트입니다.

일명 클리어는 기본적으로 새 창을 열어서 바로 나가기 기능이 있는 페이지를 호출하는 것입니다. 통화가 종료될 때 1~2초 동안 일시 중지되거나 전용 종료 페이지에서 창이 닫힐 수 있습니다. 이 페이지와 일반 종료 후 홈페이지로 다시 전환하는 방법의 차이점은 종료 후 자동으로 닫히고 별도의 조작 없이 바로 열 수 있다는 점입니다.

[참고] window.onUnload에서 판단이 이루어지지 않으면 페이지를 새로 고치는 등 현재 페이지가 변경될 때 이 이벤트가 트리거됩니다. 따라서 일부 정상적인 동작을 차단하기 위해서는 특정 동작을 포착하는 판단이 이루어져야 한다.

계속: 사용자가 IE에서 창을 직접 닫기 전에 세션을 지우는 방법

어제 구현 아이디어를 설명했는데, 실제 동작에서는 프로그램이 정상적으로 실행될 수 있도록 딜레이를 추가해야 한다는 것을 알게 되었습니다. 구현 세부 사항은 간단한 시간 지연 기능과 함께 아래에 첨부되어 있습니다. 코드가 테스트되었습니다.


코드 복사 코드는 다음과 같습니다.
>
둘째, 창이 로드되거나 종료될 때 브라우저를 한 번 새로 고치려면 다음을 수행하면 됩니다.


닫을 때 새로 고침
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.