有没有办法知道用户离开asp.net页面?

我的问题有点棘手。 至少我认为。 反正也许不是。 我想知道是否有任何方法可以知道用户是否离开了该页面。 无论他点击“上一个按钮”,关闭窗口或点击我网站上的链接。 如果我的记忆仍然很好,我认为使用JavaScript是可能的。

但就我而言,我想在我的代码隐藏中做一些事情(清理对象)。

真的没有办法做到这一点。 浏览器返回时不会触发任何事件。

你可以使用Javascript来完成它,但它最多也很困难。

在这里查看问题 。

这个脚本也可以。 它在这里被发现

 

您可以使用javascript在用户离开页面时告诉服务器。 但是一旦Web服务器离开服务器,网络服务器就会将其清除,而用户可能会将页面保持打开状态一周。

如果您在页面卸载时使用页面上的javascript向服务器发出通知, 可以执行某些操作。 但是,您无法判断他是否将您的页面留在另一个页面,另一个网站或关闭浏览器。

并且不保证始终发送最后一次通知,因此您不能完全依赖它。

因此,使用javascript通知来清理对象(缓存或会话)是一个有缺陷的系统。 您最好使用独立于onunload通知的缓存和会话失效策略。

如果这样做的目的是清理代码隐藏中的对象,那么依赖会话超时是否足够好? 在清理这些对象之前(或者您为会话超时设置的任何内容),这将是一个20分钟的延迟。

但这是一种简单可靠的方法。 在你的Global.asax文件中,你只需要这样做:

 Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) ' Clean up stuff End Sub 

如上所述,你可以在JavaScript中不可靠地做到这一点,但我从你的问题的措辞中假设你想在服务器端代码中执行它(“代码隐藏”)。

这是不可能的,因为代码隐藏在不同的计算机(Web服务器)上运行,并且不知道在用户的计算机上发生了什么,除非浏览器将请求发送回服务器(这需要一些Javascript或其他客户端)码)。

如果必须,请使用会话超时事件来清除在请求生命周期之外存储的任何状态信息。

Euuwww ……好吧。 我的问题是因为我在Session变量中存储了一个对象(带有一堆搜索标准)。 通过将其存储在会话变量中,如果用户返回到我的搜索页面结果,它将列出与上次相同的结果。 但是,在一些反思之后(不是在代码中,而是在我的脑海中,在看到你的答案:oP之后),我将在我的对象中添加一个布尔属性,这意味着类似“IsDirty”或“HasBeenListed”。 当我将加载回来时,如果它设置为脏,它将重定向回另一页。

谢谢大卫。