2010-06-23 14 views
1

J'ai une application Web asp.net multiple. Dans cette application différents domaines utilisant les mêmes pages. Toutes les pages héritent de la classe de base nommée: PageBase qui hérite de System.Web.UI.Page. En utilisant: HttpContext.Current.Request.ServerVariables ["HTTP_HOST"] je cen déterminer quel est le domaine, puis obtenir toutes les informations dont j'ai besoin pour ce domaine et tout fonctionne bien.Plusieurs sites Web siège de l'application visiteur

Mon problème commence lorsque je souhaite utiliser un compteur de visiteurs différent pour chaque site en fonction de la session. Étant donné que Global.asax a des événements globaux: Session_Start Session_End compteur simple comptera tous les visiteurs sur tous les sites ensemble. J'essaie de faire du code pour Global.asax dans la classe mais je n'ai pas froid dans cette classe les informations du site web PageBase (System.Web.UI.Page).

Je serai très reconnaissant pour toutes les idées pour résoudre ce problème

cheinan

Répondre

0

Je ne suis pas en mesure de naviguer d'un « site » à l'autre dans la même session de chaque site ont est sur

session différente créé.

mais je suis très reconnaissant parce que vous me donniez en idée comment Sølv ce problème

voici ce que je l'ai fait: i créé classe compteur avec dictionnaire « onlineList » étaient i creat automatique pour chaque site une clé:

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

sur ma page de base je vérifie s'il y a session [ « le numéro du site »] et sinon je commence un et faire ma classe contre d'ajouter 1 au compteur du site:

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

et sur mon Session_End finaly je fais un chef d'accusation moins:

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

Merci pour votre halp et désolé pour mes respons fin

de cheinan

0

Je suppose que vous êtes en mesure de naviguer d'un « site » à l'autre dans la même session et qu'il y a une seule session créée.

Dans ce cas, vous devez ajouter ce qui suit à votre session:

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

Ensuite, sur votre page de base, ajoutez ce qui suit:

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

Puis à la fin de la session, enregistrer chaque hôte qui a été visité.

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

     } 
}