3

我想知道当用户在 ASP.NET 中离开页面时,是否有任何方法可以始终运行一些服务器端代码。页面 Unload 事件不好,因为如果有人单击链接,则不会调用该事件。理想情况下,即使用户关闭浏览器,我也希望代码能够运行。

我怀疑我问的是不可能的,但问也无妨

4

4 回答 4

3

im not really sure if you can do that but i have a workaround in mind. There is an event in the DOM called onbeforeunload. it get calls everytime a user leaves a page. you can try sending an ajax request to the server from this function.

于 2011-01-13T11:41:43.400 回答
3

问题是,HTTP 是一个无状态协议,所以当页面完成服务时,你不会知道用户是否还在页面上。

实现这一点的唯一方法是使用隐藏的 Javascript 片段不断地使用其会话 ID 或其他类似机制 ping 服务器。当 ping 变得无响应时,您可以合理地假设该页面不再被用户查看。

这是一个解释传统 HTTP 消息流的图表。

替代文字

于 2011-01-13T11:39:03.953 回答
1

在不创建过于混乱的解决方案的情况下,最接近的方法是启用 ASP 会话。这将为每个访问者在服务器上创建一个会话,访问者将通过 cookie 进行识别。

在访问者不活动一定程度后,会话将关闭,并引发 SessionEnd 事件。这可以在 Global.asax 文件中连接。

但是我不会推荐这个,因为 HTTP 是公关的。定义一个无会话协议,使用基于服务器的会话违反了这一事实,并且通常是有问题的。当用户使用浏览器返回按钮并重新提交表单时,许多使用基于服务器的会话的解决方案都会遇到问题。因为提交表单的内容不再对应服务器会话中存在的数据。

此外,启用基于服务器的会话会严重损害应用程序的可伸缩性。

于 2011-01-13T12:09:10.140 回答
0

从来没听说过。为此,您需要使用 javascript,并在服务器端调用 Web 服务。

于 2011-01-13T11:38:36.863 回答