1

複数のWebサイトasp.netアプリケーションがあります。このアプリケーションでは、同じページを使用する異なるドメイン。すべてのページは、System.Web.UI.Pageから継承するPageBaseという名前の基本クラスから継承します。HttpContext.Current.Request.ServerVariables ["HTTP_HOST"]を使用して、ドメインを特定し、このドメインに必要なすべての情報を取得すると、すべてが正常に機能します。

私の問題は、セッションに基づいてサイトごとに異なるビジターカウンターを使用したいときに始まります。Global.asaxにはグローバルイベントがあるため、Session_Start Session_End単純カウンターは、すべてのサイトのすべての訪問者を一緒にカウントします。別のクラスでGlobal.asaxのコードビハインドを作成しようとしましたが、そのクラスでPageBase(System.Web.UI.Page)Webサイト情報を取得できません。

この問題を解決するためのアイデアにとても感謝します

チェイナン

4

2 に答える 2

0

同じセッション内で1つの「サイト」から別の「サイト」に参照でき、作成されるセッションは1つだけであると想定しています。

この場合、セッションに以下を追加する必要があります。

    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

      }
}
于 2010-06-23T14:10:54.480 に答える
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"]があるかどうかを確認し、ない場合は、Session ["siteID"]を開始して、カウンタークラスを作成してサイトカウンターに1を追加します。

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

そして最後に私のSession_Endで私は1カウント少なくします:

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

あなたの半分に感謝し、私の遅い応答を申し訳ありません

チェイナン

于 2010-07-03T19:33:00.553 に答える