首页 新闻 会员 周边

在线人数统计

0
悬赏园豆:20 [已关闭问题]

想要在OA中添加一个在线人数统计功能,可是发现效果不对劲。

1.首先创建一个全局应用程序类Global.aspx,代码如下:

 void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        Application["counter"] = 0;
    }
   
    void Application_End(object sender, EventArgs e)
    {
        //  在应用程序关闭时运行的代码
    }
       
    void Application_Error(object sender, EventArgs e)
    {
        // 在出现未处理的错误时运行的代码

    }

    void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码       
        //对application对象进行加锁,以防多个用户同时开启会话
        Application.Lock();
        Application["counter"] = (int)Application["counter"] + 1;       
        //解锁
        Application.UnLock();       
    }

    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer,则不会引发该事件。
      
        //对Application对象进行加锁,以防多个用户同时退出会话
        Application.Lock();
        Application["counter"] = (int)Application["counter"] - 1;      
        //解锁
        Application.UnLock();
    }

2.Web.config文件中做了以下配置:<sessionState mode="InProc"  timeout="2" />

3.添加了一个登陆页面Login.aspx,登陆成功后跳转到Default.aspx页面,在Default.aspx页面中有一个Label(其中lblCount.Text=Application["counter"].ToString()),还有一个退出按钮,在该按钮事件下有如下代码:Session.Abandon(); Response.Redirect("~/Login.aspx");

另外当用户点击浏览器关闭按钮时写了一段Javascript代码:

window.onunload=function(){           
            $.ajax({
              type: "GET",
              url: "closeWindow.aspx"             
            });                
       }

利用JQuery,通过Ajax在用户关闭浏览器时向CloseWindow.aspx页面发送一个请求,在CloseWindow.aspx页面的Page_Load事件中写了一句代码:Session.Abandon();

感觉写的基本上没问题,在360里面是正确的,可是在IE8中却不对,麻烦哪位大侠帮忙看一下!!!

 

Crazy Boy的主页 Crazy Boy | 初学一级 | 园豆:0
提问于:2010-02-25 10:21
< >
分享
其他回答(4)
0

这个统计在线人数是不准确的。不过也没有绝对准确的方式。代码没有问题

session存在过期时间的问题。还有就是捕捉关闭IE的动作,你上边的问题可能在IE8中你没有捕捉到IE关闭的操作。调试一下看是否捕捉到那个关闭动作

邢少 | 园豆:10926 (专家六级) | 2010-02-25 10:38
调试了一下,能够执行到,也不知道是怎么搞的,不过还是谢谢你啦!
支持(0) 反对(0) Crazy Boy | 园豆:0 (初学一级) | 2010-02-25 11:30
0

通过 长连接来实现

后台用一个进程来监视,

里面保存登陆人员信息。

可以参看下这个

[instant message]用asp.net+ jquery实现comet即时消息机制

woody.wu | 园豆:3621 (老鸟四级) | 2010-02-25 16:47
0

用 ajax 相关技术,每隔一段时间检查一次,会较准确,但是较耗宽带的做法。

WizardWu | 园豆:1402 (小虾三级) | 2010-02-25 22:40
0

window.onunload=function(){           
            $.ajax({
              type: "GET",
              url: "closeWindow.aspx"             
            });                
       }

这里的回发写的应该有问题

window.onunload=function(){   $.get("closeWindow.aspx");}因为这里只做回发,不做返回值处理,所以上面的写法是会有问题的.

西越泽 | 园豆:10775 (专家六级) | 2010-02-26 17:36
0

一般都是估计大概多少人在线。

维护一个登录人员的列表,包括登录标识、访问页面时间(每次请求都要更新)等。假设半个小时没有访问系统算不在线,然后再加上正常离线维护,以及关闭IE能获取到的离线。

这样可以稍微准确定,又不会像不断请求来维护在线的消耗服务器资源。

steven hu | 园豆:542 (小虾三级) | 2010-03-02 14:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册