ASP.NET在线用户列表精确更新解决方案——最快实时处理用户意外退出问题

需积分: 9 79 下载量 110 浏览量 更新于2024-04-11 收藏 87KB DOC 举报
ASP.NET在线用户列表精确版——解决用户意外退出在线列表无法及时更新 在ASP.NET开发中,我们经常需要实现在线用户列表的功能,以便管理员可以随时查看当前在线的用户并及时处理相关操作。然而,在实现在线用户列表功能时,我们常常会面临用户意外退出而在线列表无法及时更新的问题。一般来说,用户离开系统的方式有三种:主动注销、会话超时、直接关闭浏览器。对于主动注销和会话超时这两种情况,我们可以比较容易地将用户从在线列表中清除。然而,对于用户直接关闭浏览器这种情况,程序无法捕获到窗口关闭的精确时间,只能在会话超时后才能将用户清除出在线列表。 在搜索现有的解决方案时,发现现有的解决方案对用户意外退出的处理并不是太理想。特别是对于用户直接关闭浏览器这种情况,会导致用户在在线列表中长时间保留,给管理员造成不便。假设我们设置会话过期时间为30分钟,而用户在登陆系统后仅浏览了一个页面就直接关闭了浏览器,那么系统将在将近1小时后才能将该用户从在线列表中清除。这种情况下,系统可能会显示有很多用户在线,实际上除了当前用户外,其他用户早已退出系统。 为了解决这一问题,我们需要寻找一个解决方案将这种尴尬情况降至最低。我尝试了一个思路,即给每个在线用户增加一个RefreshTime属性,并建立一个页面Refresh.aspx,负责将当前用户的RefreshTime属性设置为当前时间。在系统的主要页面中通过XMLHttpRequest不断请求Refresh.aspx页面,以保持用户的RefreshTime属性为最新。这样一来,即使用户直接关闭浏览器,由于页面的持续请求,系统能及时更新在线用户列表,将用户移出在线列表。 通过这种方式,我们可以实现在线用户列表的精确更新,避免用户意外退出无法及时更新在线列表的情况发生。管理员可以更准确地掌握当前在线用户的情况,及时处理相关操作。同时,用户也可以更好地体验系统的在线功能,避免出现在线用户列表数据滞后的情况。通过不断地优化和改进,我们可以提高系统的稳定性和用户体验,为用户提供更好的服务。
2013-11-22 上传
最近所做的一个项目需要用到的在线用户列表,上网搜索了一下发现现有的解决方案对用户意外退出的处理均不是太理想。一般来说,用户离开系统的方式有三种:主动注销、会话超时、直接关闭浏览器,对于前两种,我们很容易便可将该用户从在线列表中清除,关键是第三种(很多用户都是直接关闭窗口的~~郁闷ing),程序无法捕获窗口关闭的精确时间,只能等到会话超时后在能将该用户清除出在线列表,假设我们设置会话超时时间为60分钟,而用户登陆系统随便浏览一个页面就以关闭浏览器的方式退出的话,我们要在将近1小时后才能从在线列表中将该用户清除出去(想象一下,系统显示n多人在线,可能除了你之外其他的n-1人都关机走人了,汗一个先```),而本文将尝试寻找一个解决方案把这种尴尬降至最低。 我的大概思路是,给每在线用户增加一个RefreshTime属性,建立一个负责将当前用户的RefreshTime属性设置为当前时间的单独页面(Refresh.aspx),然后在系统的主要页面(也可以是所有页面)中通过xmlhttp不断地请求Refresh.aspx页面,一旦用户关闭了与本系统相关的所有窗口,即以直接关闭浏览器的方式退出系统,那么该用户的RefreshTime属性便不会自动更新了,我们再设置一个自动刷新的超时时间(这个要比会话超时短很多_refreshTimeout),当发现某用户超过_refreshTimeout的时间没有自动刷新,就能判定该用户已经以直接关闭浏览器的方式退出了。 假设我们设置会话超时时间为60分钟,自动刷新超时时间为1分钟,在客户端通过xmlhttp每隔25秒(之所以不设1分钟,是防止网速慢的时候访问Refresh.aspx超时,个人感觉,不一定正确)访问一次Refresh.aspx页面,在用户登陆、用户注销、检测用户是否在线的时候都执行清理超时用户(包括会话超时和自动刷新超时)操作,这样一来,在线用户列表的统计误差就由60分钟降至1分钟了。