多个web坐应用程序访问者计数器

时间:2010-06-23 13:57:39

标签: asp.net session visitor-statistic

我有一个多网站坐asp.net应用程序。 在此应用程序中,不同的域使用相同的页面。 所有页面都从名为:PageBase的基类继承 从System.Web.UI.Page继承。 使用:HttpContext.Current.Request.ServerVariables [“HTTP_HOST”] 我决定什么是域,然后获得我需要的所有信息 对于这个领域,一切都很好。

当我想根据会话为每个站点使用不同的访问者计数器时,我的问题就开始了。 因为Global.asax有全局事件: 在session_start Session_End中 简单的计数器将统计所有网站上的所有访问者。 我尝试在不同的类中为Global.asax创建代码 但我感觉不到该类的PageBase(System.Web.UI.Page)网站信息。

我将非常感谢解决这个问题的任何想法

cheinan

2 个答案:

答案 0 :(得分:0)

我假设您可以在同一会话中从一个“站点”浏览到另一个“站点”,并且只创建了一个会话。

在这种情况下,您需要将以下内容添加到会话中:

    Session["CountedHosts"] = new List<string>();

然后,在您的基页上添加以下内容:

var host = Request.ServerVariables["HTTP_HOST"];
var countedHosts = Session["CountedHosts"] as List<string>;
if (countedHosts != null && !countedHosts.Contains(host))
{
    countedHosts.Add(host);
}

然后在会话结束时,记录所访问的每个主机。

var countedHosts = Session["CountedHosts"] as List<string>;
if (countedHosts != null)
{
     foreach (var host in countedHosts)
     {
          //Log it

      }
}

答案 1 :(得分:0)

我无法在每个网站所在的同一会话中从一个“网站”浏览到另一个网站

创建了不同的会话。

但我非常感谢你,因为你给了我一个想法 如何解决这个问题

这是我做的: 我用词典“onlineList”创建了计数器类,我自动为每个站点创建了一个键:

public abstract class counter{
public static Dictionary<string, int> onlineList = new Dictionary<string, int>();

 //do add one count
public static void doSiteCountOn(string siteID)
{
    if (onlineList.ContainsKey(siteID))
    {
        onlineList[siteID] += 1;
    }
    else
    {
        onlineList.Add(siteID, 1);
    }
}

//do less one count
public static void doSiteCountOff(string siteID)
{
    if (onlineList.ContainsKey(siteID))
    {
        onlineList[siteID] -= 1;
    }
    else
    {
        onlineList.Add(siteID, 0);
    }
}

//get the count
public static string onlineCount(string siteID)
{
    if (onlineList.ContainsKey(siteID))
    {
        return onlineList[siteID].ToString();
    }
    else
    {
        return "0";
    }
}

//reset the count if needed
public static void resetCount(string siteID)
{
    if (onlineList.ContainsKey(siteID))
    {
        onlineList[siteID] = 0;
    }
}}

在我的基页上,我检查是否有Session [“siteID”] 如果不是我开始一个并让我的计数器类加1到网站计数器:

if (Session["siteID"] == null){
Session["siteID"] = _siteID;
counter.doSiteCountOn(_siteID);}

最后在我的Session_End上我做了一个更少的计数:

void Session_End(object sender, EventArgs e){
if (Session["siteID"] != null)
    {
        counter.doSiteCountOff(Session["siteID"].ToString());
    }}

谢天谢地 对不起我的迟到了

cheinan