按名称计算总会话数

时间:2014-05-20 20:23:18

标签: c# asp.net session global

我发现本教程可以计算aspx网站上的会话数量:

http://www.mindfiresolutions.com/How-to-Show-Session-Count-in-ASPNet-Web-Application-227.php

我在登录时在会话中存储String(例如用户ID):

Session["Teacher"] = "123ABC";

当您想要计算所有会话时,但是当您使用两个不同的会话名称时,本教程很好,例如:Session["Teacher"]Session["Student"],并且您希望计算按名称分隔的会话,本教程不符合您的要求。

如何按名称统计总会话数?所以我希望获得Session["Teacher"]的计数和Session["Student"]

的另一个计数

感谢。

1 个答案:

答案 0 :(得分:0)

假设Session["Teacher"]Session["Student"]是互斥的:

protected void Application_Start(object sender, EventArgs e)
{
    //Session Count is intialized with 0.      
    Application["TeacherSessionCount"] = 0;
    Application["StudentSessionCount"] = 0;
}

然后,您指定Session["Teacher"]

...
Session["Teacher"] = "123ABC";
Application.Lock();

int countSession = (int)Application["TeacherSessionCount"];
Application["TeacherSessionCount"] = countSession + 1;

Application.UnLock();
... 

以及您指定Session["Student"]的位置:

...
Session["Teacher"] = "456XYZ";
Application.Lock();

int countSession = (int)Application["StudentSessionCount"];
Application["StudentSessionCount"] = countSession + 1;

Application.UnLock();
... 

protected void Session_End(object sender, EventArgs e)
{
    string key = null;
    if (Session["Teacher"] != null)
      key = "TeacherSessionCount";
    else if (Session["Student"] != null)
      key = "StudentSessionCount";

    if (key != null)
    {
      Application.Lock();

      int countSession = (int)Application[key];
      Application[key] = countSession - 1;

      Application.UnLock();
    }
}

请注意http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end(v=vs.110).aspx

中描述的Session_OnEnd事件的限制