1

マスターページを持つ Web サイトを作成しています。訪問者数を記録するヒットカウンターを作成したいのですが、コードを見つけてマスターページに入れました。コードは次のとおりです: マークアップ コード:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="counter.ascx.cs" Inherits="counter" %>
<asp:Label ID="lblCounter" runat="server"></asp:Label>

コード ビハインド - C#:

protected void Page_Load(object sender, EventArgs e)
{
 this.countMe();
 DataSet tmpDs = new DataSet();
 tmpDs.ReadXml(Server.MapPath("~/counter.xml"));
 lblCounter.Text = tmpDs.Tables[0].Rows[0]["hits"].ToString();
}
private void countMe()
{
 DataSet tmpDs = new DataSet();
 tmpDs.ReadXml(Server.MapPath("~/counter.xml"));
 int hits = Int32.Parse(tmpDs.Tables[0].Rows[0]["hits"].ToString());
 hits += 1;
 tmpDs.Tables[0].Rows[0]["hits"] = hits.ToString();
 tmpDs.WriteXml(Server.MapPath("~/counter.xml"));
}

コードを機能させるためのルート ディレクトリ内の xml ファイル。XML ファイルは次のとおりです。

 <?xml version="1.0" encoding="utf-8" ?>
 <counter>
   <count>
      <hits>0</hits>
   </count>
 </counter>

しかし、私のウェブサイト内のすべてのページは、アクセスするたびにカウンターをトリガーします。このコードを修正して、1 人の訪問者によって 1 回だけカウンターがトリガーされるようにしてください。

コードをインデックス ページのみに配置することにしましたが、インデックスを開くたびに (インデックス ページにとどまっている場合でも) 更新するたびにカウンターがトリガーされます。

4

4 に答える 4

0

Global.ascx ファイルからソリューションを取得できます。アプリケーションの Golobal.ascx.cs のコード ビハインドに移動します。Global.Cs ファイルで変数を宣言します。また、Global.ascx.cs ファイルの「Session_Start」関数でカウントを維持します。ユーザー数を取得するパブリック メソッドを作成する

例えば:

protected void Session_Start(Object sender, EventArgs e)
{
  totalNumberOfUsers += 1;
  currentNumberOfUsers += 1;
}


protected void Session_End(Object sender, EventArgs e)
{
  currentNumberOfUsers -= 1;
}

public static int TotalNumberOfUsers
{
  get
  {
    return totalNumberOfUsers;
  }
}

public static int CurrentNumberOfUsers
{
  get
  {
    return currentNumberOfUsers;
  }
} 
于 2013-07-15T06:44:10.310 に答える