Несколько веб -сайтов приложения для посетителя

StackOverflow https://stackoverflow.com/questions/3102268

Вопрос

У меня есть приложение для нескольких веб -сайтов 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

      }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top