浏览器关闭时调用页面方法

大家好,我正试图在bodyunload方法上调用[webmethod]。

但它只是在页面加载本身被解雇。 我该如何预防呢?

这是我正在使用的代码:

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

谢谢你,Nagu

我用下面的代码进行了测试,它运行正常。

在Aspx页面中

        

在Codebehind中

 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(); } } 

您可以在AbandonSession方法中放置断点以validation它是否在卸载时被点击。

你试图做的是一个坏主意。 考虑在会话中添加更少的数据,或降低超时。

也许您没有意识到当用户刷新或导航离开页面时onunload会触发。 因此,假设您的代码实际工作,如果您的用户刷新了他们的页面,那么他们的会话将被终止。 如果他们访问了网站上的任何其他页面,他们的会话也将被终止!

可能不是你希望的function!

无法始终如一地处理此类事件。 会话“结束”的原因太多了。 其中最简单的是丢失或封闭的连接。 在这种情况下,任何被解雇的JavaScript都不会到达服务器。

即使你能按照你想要的方式工作,它也只能在部分时间内工作。 如果你不能依赖它,你的时间可能会花费和不同的解决方案。

已经有几年了,但我不知道WebMethod可以是静态的。