C# 有没有办法知道用户正在使用asp.net离开页面?
我的问题有点棘手。至少我认为是这样。无论如何,也许不是。我想知道是否有办法知道用户是否正在离开页面。无论他点击“上一步按钮”,关闭窗口或点击我网站上的链接。如果我的内存仍然良好,我认为使用JavaScript是可能的C# 有没有办法知道用户正在使用asp.net离开页面?,c#,asp.net,events,C#,Asp.net,Events,我的问题有点棘手。至少我认为是这样。无论如何,也许不是。我想知道是否有办法知道用户是否正在离开页面。无论他点击“上一步按钮”,关闭窗口或点击我网站上的链接。如果我的内存仍然良好,我认为使用JavaScript是可能的 但在我的例子中,我想在代码隐藏中做一些事情(清理对象)。真的没有办法。浏览器返回时不会触发任何事件 您可以使用Javascript来实现,但这充其量也很困难 看 这个脚本也可以工作。它被发现了 window.onbeforeunload=函数(evt){ var message=
但在我的例子中,我想在代码隐藏中做一些事情(清理对象)。真的没有办法。浏览器返回时不会触发任何事件 您可以使用Javascript来实现,但这充其量也很困难 看 这个脚本也可以工作。它被发现了
window.onbeforeunload=函数(evt){
var message='您确定要离开吗?';
如果(evt的类型==‘未定义’){
evt=window.event;
}
如果(evt){
evt.returnValue=消息;
}
返回消息;
}
用户离开页面时,可以使用javascript通知服务器。但是一旦网页离开服务器,Web服务器就会洗刷它的手,而用户可能会将网页打开一周
如果您在页面上使用javascript在页面卸载时向服务器发出通知,您可以采取一些措施。但是,你不知道他是离开你的页面去你的另一个页面、另一个网站,还是关闭浏览器
最后的通知也不能保证总是发送,所以你不能完全依赖它
因此,使用javascript通知清理对象(缓存或会话)是一个有缺陷的系统。您最好使用独立于onunload通知的缓存和会话失效策略。如前所述,您可以在JavaScript中不可靠地执行此操作,但从您问题的措辞来看,我假设您希望在服务器端代码(“代码隐藏”)中执行此操作 这是不可能的,因为代码隐藏在另一台计算机(web服务器)上运行,并且不知道用户计算机上发生了什么,除非浏览器将请求发送回服务器(这需要一些Javascript或其他客户端代码)
如果必须,请使用会话超时事件清除请求生存期以外存储的任何状态信息。如果此操作的目的是清除代码中的对象,那么依赖会话超时是否足够好?在清理这些对象(或者设置会话超时的任何对象)之前,需要20分钟的延迟 但这是一种简单可靠的方法。在Global.asax文件中,您只需执行以下操作:
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Clean up stuff
End Sub
EUUWW。。。好的。我的问题是因为我在会话变量中存储了一个对象(带有一系列搜索标准)。通过将其存储在会话变量中,如果用户返回到我的搜索页面结果,它将列出与上次相同的结果。但是,经过一些反思(不是在代码中,而是在我的头脑中,在看到你的答案:oP之后),我会在我的对象中添加一个布尔属性,它的意思是“IsDirty”或“HasBeenListed”。当我重新加载时,如果设置为dirty,它将重定向回另一个页面
谢谢大卫。是的,有些想法不错,但我想我的主要帖子还不够清楚。这是为了防止当用户返回到处理会话变量的页面时。。。见我的第二篇文章。感谢您的回复。请注意:如果您使用的是状态服务器或SQL Server状态管理,会话结束将不会启动。您可能只需要显式清除Page_Load或Init上的会话对象,而不是查找“leaving”事件。回答不错。非常清楚。。。尤其是像我这样经常说法语的人。感谢我猜每次回发都会触发
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
' Clean up stuff
End Sub