.net怎么控制用户退出,或关闭时,修改数据库?

hergi 2011-06-10 12:37:51
当用户退出或关闭窗口体时,都要修改数据在线(s_onlne)字段....你有什么好的方法以行...最好不要用前台JS...
...全文
344 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
chu_czx444 2011-06-10
  • 打赏
  • 举报
回复
up up
arecaiz 2011-06-10
  • 打赏
  • 举报
回复
长连接 (这样对性能引响很大)

正文:
最近所做的一个项目需要用到的在线用户列表,上网搜索了一下发现现有的解决方案对用户意外退出的处理均不是太理想。一般来说,用户离开系统的方式有三种:主动注销、会话超时、直接关闭浏览器,对于前两种,我们很容易便可将该用户从在线列表中清除,关键是第三种(很多用户都是直接关闭窗口的~~郁闷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分钟了。
yuxh81 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sp1234 的回复:]

不知道怎样测试、不关心需求分析,就开始搞“技术攻关”,这是程序员的主要缺点。
[/Quote]

qq623932737 2011-06-10
  • 打赏
  • 举报
回复
看你说的好像是限制同意用户只能由一人登录,我知道两种方法,
一就是 你可以在这用户登录的时候 运用ajax时时更新数据库中的字段,比如用时间精确到秒,每秒更新一次
settimeout 和ajax实现,这样的话别人用这用户登录的时候判断当前时间与数据库中的时间字段比较,如果小于那字段,说明这用户已经有人登录,否则就可以登录,
方法二就是
添加个全局应用程序类
里面有session过期事件 可以实现你的效果
hanyise520 2011-06-10
  • 打赏
  • 举报
回复
用COOKIE就能判断,不管你是什么方式退出
钓鱼的熊猫 2011-06-10
  • 打赏
  • 举报
回复
有一个javascript事件在关闭网页之前触发的,onbeforunlod好像
moon5284 2011-06-10
  • 打赏
  • 举报
回复
这个问题期待解决,比如需要保存用户上次退出的时间等也是这样的...

=============================================================================
欢迎使用超给力的CSDN论坛专用阅读器:http://download.csdn.net/source/3353776
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 taohuaxiaoyu 的回复:]

关注。
我们学校的网关系统一直存在这个问题,如果用户不手动断开网关,当关机或者ip丢失了,别人就可以随便用自己的和之前那ip绑定的网关,很纠结。。想帮学校改一下。
[/Quote]
那就将通讯加密吧。
hergi 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arecaiz 的回复:]
长连接 (这样对性能引响很大)

正文:
最近所做的一个项目需要用到的在线用户列表,上网搜索了一下发现现有的解决方案对用户意外退出的处理均不是太理想。一般来说,用户离开系统的方式有三种:主动注销、会话超时、直接关闭浏览器,对于前两种,我们很容易便可将该用户从在线列表中清除,关键是第三种(很多用户都是直接关闭窗口的~~郁闷ing),程序无法捕获窗口关闭的精确时间,只能等到会话超时后在能将该用户……
[/Quote]
你自己都说了对性能引响很大...我现在自己想了一个方法(和你的有一相同之处),就是在用户表里加了一个时间字段(定时更新)...当别的用户向他提出请求时,在去判断那个时间是否超时...在做修改
  • 打赏
  • 举报
回复
不知道怎样测试、不关心需求分析,就开始搞“技术攻关”,这是程序员的主要缺点。
  • 打赏
  • 举报
回复
瞎掰。什么是用户退出?

我退出csdn的动作,通常就是从收藏夹选择、或者从地址栏打入浏览器它网站去。
porschev 2011-06-10
  • 打赏
  • 举报
回复

难准确。。

定时去查用户活动。。。比如20分钟没有活动。。。

把用户状态改为下线。。
xuexiaodong2009 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wxr0323 的回复:]

globle里面的application_end里

JS捕捉浏览器关闭事件 JS

SESSION消失的时候也可以
[/Quote]简单,复杂就是定时通信,一段时间没通信就认为关了
zys55227733 2011-06-10
  • 打赏
  • 举报
回复
关注。
我们学校的网关系统一直存在这个问题,如果用户不手动断开网关,当关机或者ip丢失了,别人就可以随便用自己的和之前那ip绑定的网关,很纠结。。想帮学校改一下。
子夜__ 2011-06-10
  • 打赏
  • 举报
回复
globle里面的application_end里

JS捕捉浏览器关闭事件 JS

SESSION消失的时候也可以

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧