2009-07-07 7 views
0

안녕하세요, 여기 bodyunload 메서드에서 [webmethod]를 호출하려고합니다.브라우저가 닫힐 때 페이지 메서드 호출

하지만 페이지로드 자체가 해고 당하고 있습니다. 어떻게 방지합니까? 당신이 할하려는 것은 나쁜 생각

[WebMethod] 
public static void AbandonSession() 
{ 
    HttpContext.Current.Session.Abandon(); 
} 


<script language="javascript" type="text/javascript"> 
//<![CDATA[ 

function HandleClose() { 
    PageMethods.AbandonSession(); 
} 

//]]> 
</script> 

<body onunload="HandleClose()"> 
.... 
.... 
.... 
</body> 

감사합니다, Nagu

+0

코드를 표시하십시오. –

+0

무슨 일이 일어나는지 보여줄 수있는 코드를 게시 할 수 있습니까? –

+0

좋습니다. 이제는 webmethod가 호출되고 HandleClose가 호출된다고 생각하는 이유는 무엇입니까? –

답변

3

아래 코드를 테스트했으며 정상적으로 작동합니다.

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Services; 

public partial class ClearSessionOnPageUnload : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    [WebMethod] 
    public static void AbandonSession() 
    { 
     HttpContext.Current.Session.Abandon(); 
    } 

} 

Codebehind가에서 aspx 페이지

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 

    <script type="text/javascript"> 
     //<![CDATA[ 

     function HandleClose() 
     { 


      PageMethods.AbandonSession(); 
     } 

     //]]>  
    </script> 

</head> 
<body onunload="HandleClose()"> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 
    </asp:ScriptManager> 
    </form> 
</body> 
</html> 

에서

당신은 언로드에 타격을 받고 있는지 확인하기 위해 AbandonSession 방법에 중단 점을 넣을 수 있습니다.

1

:

여기 내가 사용하고 코드입니다. 세션에 더 적은 데이터를 두거나 시간 초과를 낮추십시오.

사용자가 페이지를 새로 고치거나 탐색 할 때 onunload가 실행되는 것을 알지 못했을 수도 있습니다. 따라서 코드가 실제로 작동한다고 가정하면 사용자가 페이지를 새로 고치면 세션이 종료됩니다. 그들이 사이트의 다른 페이지를 방문하면 세션도 종료됩니다!

아마 당신이 원하는 기능이 아닐 것입니다!

0

이 유형의 이벤트를 일관되게 처리 할 방법이 없습니다. 세션이 "끝내기"에 너무 많은 원인이 있습니다. 이 중 가장 간단한 것은 손실되거나 닫힌 연결 일 것입니다. 이 경우 실행 된 모든 JavaScript는 결코 서버에 도달하지 않습니다.

원하는대로 작동시킬 수 있다고해도 시간의 일부만 작동하게됩니다. 당신이 그것에 의지 할 수없는 경우에 당신의 시간은 다른 해결책 및 낭비 될지도 모른다.

0

몇 년이 지났지 만 WebMethod가 정적 일 수 있음을 알지 못했습니다.

+0

@ Leppie- static은 정상입니다. 이것은 실제로 웹 서비스가 아닌 페이지 메서드입니다. MS AJAX에 기능을 공개하는 방법 일뿐입니다. – RichardOD

+0

@ Leppie- 여기에 대한 내용은 http://msdn.microsoft.com/en-us/magazine/cc163480.aspx#S5에서 읽을 수 있습니다. 희망은 유용합니다. – RichardOD

관련 문제