2010-06-23 5 views
1

У меня есть несколько веб-сидит приложение asp.net. В этом приложении разные домены, использующие одни и те же страницы. Все страницы наследуются от базового класса с именем: PageBase , который наследуется от System.Web.UI.Page. С помощью: HttpContext.Current.Request.ServerVariables ["HTTP_HOST"] i cen определить, что является доменом, а затем получить всю информацию, которая мне нужна для этого домена, и все работает хорошо.Несколько веб-приложений посетитель счетчик

Проблема возникает, когда я хочу использовать разные счетчики посетителей для каждого сайта на основе сеанса. Потому что Global.asax имеет глобальные события: Session_Start Session_End простой счетчик будет считать всех посетителей на всех сайтах вместе. Я пытаюсь сделать код для Global.asax в другом классе , но я не получаю в этом классе информацию о веб-сайте PageBase (System.Web.UI.Page).

Я буду очень благодарен за любые идеи, чтобы решить эту проблему

cheinan

ответ

0

Я не могу просматривать с одного «сайта» в другой в пределах одной и той же сессии каждого сайта есть как на

другой сеанс создан.

, но я очень благодарен вам, потому что вы дали мне собственную идее как SOLV этой проблемы

вот что я сделал: я создал встречный класс с Словарем «onlineList» была я автоматическая Creat для каждого сайта ключ:

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; 
    } 
}} 

на моей базовой страницы я проверить, есть ли сессия [ «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()); 
    }} 

спасибо за halp и жаль моего последнего RESPONS

cheinan

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 

     } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^