当前页面上包含一个select框, 用来显示在线用户信息(用户名, 积分等), 要求能动态改变这个列表, 但不能频繁刷新页面, 各位有好得建议么?先谢谢了!!

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/3692/3692181.xml?temp=.550503
      

  2.   

    总的来说,要做个在线人数统计简单,但是要做在线名单并且保存用户的访问日志,就需要耗费比较多的系统资源,是否划算就难说了(我只看需求文档,其他不管...);前面用过的IHttpModule方法也不错,原先每用过,也学了一招... 感谢思归老大的帮忙,分就散了吧~using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.SessionState;
    using System.Data;
    using System.Data.OleDb;namespace XsExam
    {
    /// <summary>
    /// Global 的摘要说明。
    /// </summary>
    public class Global : System.Web.HttpApplication
    {
            private static System.Threading.Timer timer;
            private const int interval = 1000 * 60 * 10;//检查在线用户的间隔时间
            
    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.IContainer components = null;public Global()
    {
    InitializeComponent();
    }protected void Application_Start(Object sender, EventArgs e)
    {
                if (timer == null)
                    timer = new System.Threading.Timer(new System.Threading.TimerCallback(ScheduledWorkCallback),
                        sender, 0, interval);            DataTable userTable = new DataTable();
                userTable.Columns.Add("UserID");//用户ID
                userTable.Columns.Add("UserName");//用户姓名
                userTable.Columns.Add("FirstRequestTime");//第一次请求的时间
                userTable.Columns.Add("LastRequestTime");//最后一次请求的时间
                userTable.Columns.Add("ClientIP");//
                userTable.Columns.Add("ClientName");//
                userTable.Columns.Add("ClientAgent");//
                //userTable.Columns.Add("LastRequestPath");//最后访问的页面            userTable.PrimaryKey = new DataColumn[]{userTable.Columns[0]};
                userTable.AcceptChanges();            Application.Lock();
                Application["UserOnLine"] = userTable;
                Application.UnLock();
    }
     
    protected void Session_Start(Object sender, EventArgs e)
    {        }        protected void Application_BeginRequest(Object sender, EventArgs e)
    {
                
    }protected void Application_EndRequest(Object sender, EventArgs e)
    {}        protected void Application_AcquireRequestState(Object sender, EventArgs e)
            {
                HttpApplication mApp = (HttpApplication)sender;
                if(mApp.Context.Session == null) return;
                if(mApp.Context.Session["UserID"]==null ) return;
                string userID = mApp.Context.Session["UserID"].ToString();
                
                DataTable userTable = (DataTable)Application["UserOnLine"];
                DataRow curRow = userTable.Rows.Find(new object[]{userID});
                if(curRow != null)
                {
                    this.GetDataRowFromHttpApp(mApp,ref curRow);
                }
                else
                {
                    DataRow newRow = userTable.NewRow();
                    this.GetDataRowFromHttpApp(mApp,ref newRow);
                    userTable.Rows.Add(newRow);
                }
                userTable.AcceptChanges();            Application.Lock();
                Application["UserOnLine"] = userTable;
                Application.UnLock();        }protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
               
    }protected void Application_Error(Object sender, EventArgs e)
    {
                
    }       
    protected void Session_End(Object sender, EventArgs e)
    {
                
    }protected void Application_End(Object sender, EventArgs e)
    {
                
    }#region Web 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
                this.components = new System.ComponentModel.Container();
                
            }
    #endregion        private void GetDataRowFromHttpApp(HttpApplication mApp,ref DataRow mRow)
            {
                if(mApp.Context.Session == null) return;
                if(mApp.Context.Session["UserID"]==null || mApp.Context.Session["UserName"]==null) return;
                string userID = mApp.Context.Session["UserID"].ToString();
                string userName = mApp.Context.Session["UserName"].ToString();
                //string requestPath = mApp.Request.Path;
                
                if(mRow["UserID"].ToString().Length<1)
                {
                    mRow["UserID"]      = userID;
                    mRow["UserName"]    = userName;
                    mRow["FirstRequestTime"] = System.DateTime.Now;
                    mRow["ClientIP"]    = mApp.Context.Request.UserHostAddress;
                    mRow["ClientName"]  = mApp.Context.Request.UserHostName;
                    mRow["ClientAgent"] = mApp.Context.Request.UserAgent;
                }            mRow["LastRequestTime"] = System.DateTime.Now;
                //mRow["LastRequestPath"] = requestPath;
                
            }        private void ScheduledWorkCallback (object sender)
            {
                string filter = "Convert(LastRequestTime,'System.DateTime') < Convert('" + System.DateTime.Now.AddSeconds(-interval/1000).ToString() + "','System.DateTime')";
                DataTable userTable = (DataTable)Application["UserOnLine"];
                DataRow[] lineOutUsers = userTable.Select(filter);
                for(int i=0;i<lineOutUsers.Length;i++)
                {
                    DataRow curRow = lineOutUsers[i];
                    
                    //保存到数据库
                    XsStudio.Database db = new XsStudio.Database();
           curRow.Delete();
                    
                }
                userTable.AcceptChanges();            Application.Lock();
                Application["UserOnLine"] = userTable;
                Application.UnLock();
            }       
    }
    }
      

  3.   

    使用innerHtml属性修改...
    至于取得的方式,可以通过另一个网页取得。msxml.xmlhttp