我需要找到一种方法来拦截浏览器关闭并调用metod来更新记录,其中包含有关DB中已记录用户的若干信息。当用户注销或关闭浏览器时,更新此记录非常重要。显然,当用户点击“注销”时,我会在服务器端事件中处理更新,但如果用户只是从浏览器退出会怎么样?
有人建议使用window.onbeforeunload
事件并对某些WS或WebMethod进行异步调用来执行代码,但这根本不能说服我:onbeforeunload
的问题在于它显示确认提示。我需要避免这个消息,只需调用该方法。
所以我想知道是否存在不使用ajax或javascript的“服务器端”解决方案。 例如......一种在会话放弃或会话清除时触发某些事件的方法,或者其他一些方法来解决这个问题只是在代码隐藏...
答案 0 :(得分:4)
您无法使用服务器端解决方案来了解客户端浏览器中发生的事情。
答案 1 :(得分:1)
我不相信有任何办法可以做你只需要服务器端的东西。客户端是唯一的方法。服务器无法知道浏览器窗口何时关闭,这是HTTP协议的限制。
答案 2 :(得分:0)
是的,您可以在Global.AsaX中放置一个事件,该事件将在会话结束时触发。现在,如果你需要来自客户端的数据来更新数据库等,你需要一种方法来实现它,但如果没有,那么Session_End
就可以了。
注意:会话结束与浏览器关闭略有不同,因此这取决于您希望事件触发的内容。
答案 3 :(得分:0)
我想找到一个'服务器端'的解决方案,而不使用ajax或 的JavaScript。
我怀疑这个要求是不可能的。
也许你可以这样做:
META
元素)每隔几秒钟与服务器联系但是,我认为这种解决方案不能很好地扩展。
答案 4 :(得分:0)
您是否考虑过像signalr这样的东西?我用它来检测有人打开记录的时间。
public class ChatHub : Hub
{
public override Task OnDisconnected()
{
Broadcaster.Disconnected(Context.ConnectionId);
return base.OnDisconnected();
}
}
答案 5 :(得分:0)
目前,我彻底改变了解决问题的方法。 为了更新挂起的行,我使用每晚运行的Quartz.NET框架实现了一个定时作业。