Несколько веб -сайтов приложения для посетителя
-
29-09-2019 - |
Вопрос
У меня есть приложение для нескольких веб -сайтов ASP.NET. В этом приложении разные домены, используя одни и те же страницы. Все страницы наследуют от базового класса с именем: PageBase Wich наследуют от system.web.ui.page. Используя: httpcontext.current.request.servervariables ["http_host"] я определяю, что такое домен, а затем получаю всю необходимую мне информацию для этого домена, и все работает хорошо.
Моя проблема начинается, когда я хочу использовать разные счетчики посетителей для каждого сайта на основе сеанса. Поскольку Global.asax имеют глобальные события: session_start session_end Simple Counter будет считать всех посетителей на всех сайтах вместе. Я стараюсь создать код для Global.asax в другом классе, но мне холодно не добраться в этом классе.
Я буду очень благодарен за любые идеи, чтобы решить эту проблему
Chainan
Решение 2
Я не могу просматривать с одного «сайта» на другой в пределах одного и того же сеанса, который есть на каждом сайте.
Различный сеанс создан.
Но я очень благодарен вам, потому что ты дал мне идею, как решить эту проблему
Вот что я сделал: я создал контр-класс с словарем «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;
}
}}
На моей базовой странице я проверяю, есть ли сеанс [«SastID»], а если нет, я запускаю один и сделаю мой счетчик, чтобы добавить 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 и извините за мой поздний ответ
Chainan
Другие советы
Я предполагаю, что вы можете просмотреть с одного «сайта» на другой на одном сеансе, и что создан только один сеанс.
В этом случае вам необходимо добавить следующее на свой сеанс:
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
}
}