我有一个多网站坐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
答案 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