关于在线用户统计的另类方法,欢迎大侠们围观吐口水,独家秘方,超级简单,不信请看——
关于在线用户的统计,我在网上查了下,大师们一致认为随便用什么天方法地方法,绝对不会精确,最多是方法得当,比较精确,方法不当,比较粗略,如此而已。关于统计方法,有人说用PING的,我不知何为PING;
有人说用定时器的,我拷贝几段定时器代码,没测试成功。我自己的独家秘方,很简单,我觉得应该可以用,不过稍微粗略一些,呵呵,各位看官不防看完我的以下陈述再吐口水,呵呵——
思路步骤:
第一步:用现存的登录表,也就是登录用的表,记录登录次数、最后登录时间等信息的这个表,给这个表加一个字段,暂且取字段名为zaixianchaoshi,取在线超时之意。
第二步:用户登录时,登录成功,建立session登录状态,并更新zaixianchaoshi的时间为登录时间加上8分钟。
第三步:新建一个类方法,在该方法中,如果登录状态为true,则更新zaixianchaoshi的时间为调用该方法的时间加上8分钟。
第四步:在每个应用页面(即.aspx页面),在if(!Page.IsPostBack)中调用第三步建立的类方法。
补充:如果用户主动点击退出,即主动注销登录状态,则马上更新zaixianchaoshi的时间为退出的时间。这样做能实现的功能有二,其一可以统计出有多少在线用户,select count(id) from 登录表 where zaixianchaoshi>当前时间,这样即可。
其二:可以输出在线用户到DataList显示。我这样设计的理由是:反正用什么方法都不会精确,用我这个方法自然也不精确,用户一般不会在一个页面停留超过8分钟,即使超过8分钟,登录状态还是为true,因为默认session时效为20分钟,在20分钟内,用户刷新或打开别的页面,再次调用第三步的类方法,用户立即又在线了。我的困惑:每个页面打开时,第一次加载或刷新,都要调用一次第三步中的类方法(当然点击Button类按钮与服务器交互时不会调用),不知这样给服务器造成的压力大不大,如果开销大的话,只能寻求别的方法了。各位大虾看看,我这方法可行否,欢迎探讨和批评指正,小生在此谢过,3Q。

解决方案 »

  1.   

    ajax timer 定时查询,修改用户登录时间,判断时间差
      

  2.   

    我是楼主,回复三楼的哥们:
    1、用户超时不用删除呀,这个表是实体表呀,存在于SQL数据库中,本身就有一个字段是用来记录在线超时的,若在线超时字段的时间大于当前时间,则在线,反之,则不在线。
    2、同一账号异地登录,这个很好解决呀,查该账号的在线超时字段的时间,若大于当前时间,则拒绝登录,输出显示“该账号已经登录,请勿重复登录”。
      

  3.   

    ASP.net默认是半小时内算在线,集成了统计在线人数这个功能,原理和楼主的另类想法基本一样,不用另起炉灶了.看看ASP.NET自动建的一些表的字段就明白了
      

  4.   

    在线用户除了客户端非法关机、掉线外,其他的都好办呀!如果客户端非法关机或掉线可采用WCF服务器回调来判断。
      

  5.   

    没有必要加上8分钟,就是记录当时的服务器时间就行了。然后,如果要统计8分钟之内有访问的,那么就把当前时间减去八分钟(例如保存到变量t),然后查询数据库中相应时间小于t的就行了。另外,用户在网页上的发呆时间往往大于8分钟,比如一个人看csdn的一个帖子,这个帖子有90楼,他一个一个看肯定要大于8分钟。有些人就算看2、3层楼也要大于8分钟。你不能误判这些。所以页面应该在不刷新的情况下以ajax方式访问服务器来更新这个时间。不要太想当然地以为用户都是心里长草的、没有定性的那类人。至于什么“服务器压力”,这不是你所能处理的。我就告诉你,如果你真的需要数据库系统,那么1万个并发用户也不算多大的压力。反过来说,有些人写的程序2、3个用户使用数据库就无法维系用户体验的,那么这也是应用程序写的很烂,而不是人家数据库软件很烂。
      

  6.   


    如果你说的是asp.net在服务器端访问自己,那么我告诉你:任何用户都永远在线!因为就是自己访问自己嘛!而lz说的是asp.net页面输出到浏览器端了。这个时候,哪一个浏览器会自动编出WCF程序来访问你的服务器?!