问题描述
最近所做的一个项目需要用到的统计在线用户状态,上网搜索了一下发现现有的解决方案对用户意外退出的处理均不是太理想!需要关闭浏览器精确统计!不用Global.asax和Session有其他办法么?
解决方案
解决方案二:
仍然需要一种机制用来保存用户的活动时间。然后根据这个时间来计算用户是否在线。你可以使用Cache机制来保存,也可以使用Session,甚至可以使用SQL2005。
解决方案三:
使用数据库设计在线用户列表思想:显示在线用户模块:在数据库中只读出登陆时间加上30秒不小于当前时间的用户。更新用户时间模块:每隔30秒就更新一次数据库中,与当前用户对应的最新时间值
解决方案四:
呵呵。。。谢谢给予提示。。。
解决方案五:
学习来着
解决方案六:
mark
解决方案七:
学习
解决方案八:
顶
解决方案九:
这个没有太精确的办法!都是一个大概数据!~最好的方法应该还是在Global.asax里操作吧!
解决方案十:
iframe内嵌一个不停刷新的页面,报告此人在线
解决方案十一:
学习
解决方案十二:
精确统计是不可能的,只能近似,近似度越高,服务器负担越重.通常我的做法是用户每次访问页面,记录下他最后一次操作的时间,然后在数据库查询这个时间离当前时间的分钟数,5分钟以内算在线.
解决方案十三:
我顶11楼
解决方案十四:
5分钟太长,何况很多人看页面时会超过5分钟,而此时此人确实在看页面,并没有转到其它网站页面或者关闭浏览器。有时候离线状态与用户操作紧密相关,例如单点登录要求,如果一个人离线之后5分钟之后再次用同样帐号登录需要等5分钟,很让人烦躁。所以保证能20秒~1分钟之内就感知用户是否在线的方案,对许多应用是比较实用的。你可以创建一个用户控件,例如取名“页脚.ascx”,可以这样设计:<%@ControlLanguage="C#"AutoEventWireup="true"CodeBehind="页脚.ascx.cs"Inherits="MyApp.页脚"%><asp:UpdatePanelID="UpdatePanel1"runat="server"UpdateMode="Conditional"><ContentTemplate><asp:TimerID="Timer1"runat="server"Interval="20000"OnTick="Timer1_Tick"></asp:Timer>最近1分钟有<asp:LabelID="Label1"runat="server"SkinID="重点提醒文字"EnableViewState="false"/>个用户访问。<asp:LabelID="Test"runat="server"EnableViewState="False"Text="版权信息"Visible="False"></asp:Label></ContentTemplate></asp:UpdatePanel>然后在你的每个页面拖入这个ascx到最底部中间。在Timer_Tick中应该将当前用户的登录信息与访问时间刷新到统计数据库。
解决方案十五:
在Frame中放页面的方法,很少有专业web程序员会采用。因为它会让页面底部进度条不断“闪动”,自从ajax在国内普遍使用之后就很难见到原来那么实现的了。
解决方案:
引用13楼sp1234的回复:
5分钟太长,何况很多人看页面时会超过5分钟,而此时此人确实在看页面,并没有转到其它网站页面或者关闭浏览器。有时候离线状态与用户操作紧密相关,例如单点登录要求,如果一个人离线之后5分钟之后再次用同样帐号登录需要等5分钟,很让人烦躁。所以保证能20秒~1分钟之内就感知用户是否在线的方案,对许多应用是比较实用的。你可以创建一个用户控件,例如取名“页脚.ascx”,可以这样设计:<%@ControlLanguage="C#"…
这个说法有问题,判断单点登录我完全可以执行另一套标准,比如离最后操作时间一分钟,30秒等等。这两种判断(即单点登录和是否在线)都只需要一个数据,就是用户最后操作时间。所不同的只是离当前时间的间隔。