(1)当Application对象的生命周期开始时,Application_Start事件会被启动,当Application对象的生命结束时,

Application_End事件会被启动。本实例中,当应用程序启动时,在Application_Start事件下初始化计数器。代码如下:

// 在应用程序启动时运行的代码 
//初始化

Application["counter"]=0;

(2)Session对象的所有引用都是在引用当前用户的会话对象,这个对象提供了字典风格的访问机制,当特定的用户不再访问Web站点上的页面时,一些信息将被丢掉。代码如下:

//在新会话启动时运行的代码

//对Application加锁以防并行性

Application.Lock();

//增加一个在线人数

Application["counter"]=(int)Application["counter"]+1;

Application.UnLock();//解锁

会话结束时,使计数器自减,代码如下:

//减少一个在线人数

Application["counter"]=(int)Application["counter"]-1;

Application.UnLock();//解锁

实现过程的主要程序代码:

在Global.asax全局应用程序类中:

void Application_Start(object sender,EventArgs e)

{

    // 在应用程序启动时运行的代码 
    //初始化

    Application["counter"]=0;

}

在新会话启动时

void Session_Start(object sender,EventArgs e)

{

    Application.Lock();//对Application加锁以防并行性

    Application["counter"]=(int)Application["counter"]+1;//增加一个在线人数

    Application.UnLock();//解锁

}

会话结束时

void Session_End(objectt sender,EventArgs e)

{

        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置 StateServer 
        // 或 SQLServer,则不会引发该事件。
        //对Application加锁以防并行性

       Application.Lock();

      Application["counter"]=(int)Application["counter"]-1;//减少一个在线人数

      Application.UnLock();//解锁

}

在主页Default.aspx第一次加载时,将Application[“counter”]赋给Label.text,实现在界面上显示在线人数,其代码如下

Label2.Text=Application["counter"].ToString();