想要的结果是:  在onlineuser.aspx页面上显示:在线用户列表为:张三 2009-01-01 10:10  李四 2009-01-01 11:11
王武 2009-01-01 10:30  王六 2009-01-01 12:10
总在线用户数为:4人
像这一类问题主要存在:
1、用户离开电脑一会儿,而IE一直是打开着
2、电脑死机了
3、用户没有按退出按钮
4、用户强制关闭IE想请教一下前辈在项目中是如何处理用户在线情况呢?最好给详细一点的方法和代码

解决方案 »

  1.   

    使用全局变量记录,比如application
    在session_end中移除用户信息
      

  2.   

    http://www.opent.cn/a/2009/2/5/566.shtml
      

  3.   

    没法做到精确的实时显示的,总会有一个时间差。因为session过期是有时间的。我认为是没办法做到精确的。如果是在一定时间范围内的话就采用一楼的方法
      

  4.   

    在 login.cs 中 
      protected void BtnLogin_Click(object sender, EventArgs e)
        {
          Session["userName"]=TextBox1.Text;
        }在 Global.asax 中
    void Session_Start(object sender, EventArgs e) 
        { 
          String tem=Session["userName"].ToString();
        }运行 login.aspx 出错为:未将对象引用设置到对象的实例。
      

  5.   

    在 Global.asax 中void Application_Start(object sender, EventArgs e) 
        {
            System.Collections.Generic.List<OnlineUser> list = new System.Collections.Generic.List<OnlineUser>();
            Application["online"] = list;
        }    void Session_Start(object sender, EventArgs e) 
        {     
            
            OnlineUser model = new OnlineUser();
            model.UserName = Session["UserName"].ToString();
            model.LoginTime = DateTime.Now;
            System.Collections.Generic.List<OnlineUser> list1 = (System.Collections.Generic.List<OnlineUser>)Application["online"];
                   foreach (OnlineUser li in list1)
            {
                if (li.UserName.Trim().Equals(Session["UserName"].ToString()))
                {
                    list1.Add(model);
                    Application.Lock();
                    Application["online"] = list1;
                    Application.UnLock();
                    
                }
            }
        }运行 login.aspx 出错为:未将对象引用设置到对象的实例。