下面介紹如何進行ASP.NET中網站訪問量的統計。
一、建立一個數據表IPStat用於存放用戶信息
我在IPStat表中存放的用戶信息只包括登錄用戶的IP(IP_Address),IP來源(IP_Src)和登錄時間(IP_DateTime),些表的信息本人只保存一天的信息,如果要統計每個月的信息則要保存一個月。因為我不太懂對數據日志的操作,所以創建此表,所以說我笨吧,哈哈。
二、在Global.asax中獲取用戶信息
在Global.asax的Session_Start即新會話啟用時獲取有關的信息,同時在這里實現在線人數、訪問總人數的增量統計,代碼如下:
void Session_Start(object sender, EventArgs e)
{
//獲取訪問者的IP
string ipAddress = Request.ServerVariables["REMOTE_ADDR"];
//獲取訪問者的來源
string ipSrc;
//判斷是否從搜索引擎導航過來的
if (Request.UrlReferrer == null)
{ ipSrc = ""; }
else
{
//獲取來源地址
ipSrc = Request.UrlReferrer.ToString();
}
//獲取訪問時間
DateTime ipDatetime = DateTime.Now;
//保存IP信息到數據庫中
IPControl cont = new IPControl();
cont.AddIP(ipAddress, ipSrc, ipDatetime);
//獲取用戶訪問的頁面
string pageurl = Request.Url.ToString();
//判斷訪問的是否是默認頁
if (pageurl.EndsWith("IPStat.ASPx"))
{
//鎖定變量
Application.Lock();
//為頁面訪問量+1
Application["StatCount"] = int.Parse(Application["StatCount"].ToString()) + 1;
//解鎖
Application.UnLock();
}
//鎖定變量
Session.Timeout = 10;
//設定超時為10分鍾
Application.Lock();
Application["countSession"] = Convert.ToInt32(Application["countSession"]) + 1;//訪問總人數+1
Application["onlineWhx"] = (int)Application["onlineWhx"] + 1; //在線人數加+1
Session["login_name"] = null;
//解鎖
Application.UnLock(); }
提醒一句,別忘了下面的代碼,以實現在用戶離線時,將在線人數減去1.
void Session_End(object sender, EventArgs e)
{
// 在會話結束時運行的代碼。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式設置為 InProc 時,才會引發 Session_End 事件。 如果會話模式設置為 StateServer
// 或 SQLServer,則不會引發該事件。
//鎖定變量
Application.Lock();
Application["onlineWhx"] = (int)Application["onlineWhx"] - 1; //在線人數減-1
Session["login_name"] = null;
//解鎖
Application.UnLock();
}
三、將以上有關信息保存到數據庫IPStat
ASP.NET中網站訪問量統計的最后一個實現步驟,就是創建了一個獲取IP數據信息的類IPControl(),
用來實現對數據庫IPStat數據的操作,關於IPControl()類的內容,因為它是C#中對數據庫的操作,
*******************************************************************
一、開發流程
步驟1:
首先新建ASP.NET應用程序,如OnLine。
步驟2:
在默認Web窗體Default.aspx中放置兩個Label控件,分別命名為“lblTitle”(Text屬性為“當前在線人數” 和“lblCounter”)和“lblCounter”(Text屬性為空)。
步驟3:
Default.aspx.cs 完整后置代碼如下。
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
10 public partial class _Default : System.Web.UI.Page
11 {
12 protected void Page_Load(object sender, EventArgs e)
13 {
14 if (!Page.IsPostBack)
15 {
16 if (Application["counter"] != null)
17 {
18 lblCounter.Text = Application["counter"].ToString();
19 }
20 }
21 }
22 }
步驟4:
創建全局類Global.asax 完整代碼如下。
1 <%@ Application Language="C#" %>
2 <script runat="server">
3 void Application_Start(object sender, EventArgs e)
4 {
5 // 在應用程序啟動時運行的代碼
6 // 初始化站點在線人數計數器
7 Application["counter"] = 0;
8 }
9
10 void Application_End(object sender, EventArgs e)
11 {
12 // 在應用程序關閉時運行的代碼
13 }
14
15 void Application_Error(object sender, EventArgs e)
16 {
17 // 在出現未處理的錯誤時運行的代碼
18 }
19 void Session_Start(object sender, EventArgs e)
20 {
21 // 在新會話啟動時運行的代碼
22 // 加鎖,防止並發運行
23 Application.Lock();
24 // 計數器增1
25 Application["counter"] = Convert.ToInt32(Application["counter"]) + 1;
26 // 解鎖
27 Application.UnLock();
28 }
29 void Session_End(object sender, EventArgs e)
30 {
31 // 在會話結束時運行的代碼。
32 // 注意: 只有在 Web.config 文件中的 sessionstate 模式設置為
33 // InProc 時,才會引發 Session_End 事件。如果會話模式設置為 StateServer
34 // 或 SQLServer,則不會引發該事件。
35 // 加鎖
36 Application.Lock();
37 // 計數器減1
38 Application["counter"] = Convert.ToInt32(Application["counter"]) - 1;
39 // 解鎖
40 Application.UnLock();
41 }
42 </script>
步驟5:
配置Web.Config文件,完整代碼如下。
1 <?xml version="1.0"?>
2 <!--
3 注意: 除了手動編輯此文件以外,您還可以使用
4 Web 管理工具來配置應用程序的設置。可以使用 Visual Studio 中的
5 “網站”->“Asp.Net 配置”選項。
6 設置和注釋的完整列表在
7 machine.config.comments 中,該文件通常位於
8 \Windows\Microsoft.Net\Framework\v2.x\Config 中
9 -->
10 <configuration>
11 <appSettings/>
12 <connectionStrings/>
13 <system.web>
14 <!--
15 設置 compilation debug="true" 將調試符號插入
16 已編譯的頁面中。但由於這會
17 影響性能,因此只在開發過程中將此值
18 設置為 true。
19 -->
20 <compilation debug="true"/>
21 <!--
22 通過 <authentication> 節可以配置 ASP.NET 使用的
23 安全身份驗證模式,
24 以標識傳入的用戶。
25 -->
26 <authentication mode="Windows"/>
27 <!--
28 如果在執行請求的過程中出現未處理的錯誤,
29 則通過 <customErrors> 節可以配置相應的處理步驟。具體說來,
30 開發人員通過該節可以配置
31 要顯示的 html 錯誤頁
32 以代替錯誤堆棧跟蹤。
33 <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
34 <error statusCode="403" redirect="NoAccess.htm" />
35 <error statusCode="404" redirect="FileNotFound.htm" />
36 </customErrors>
37 -->
38 <sessionState mode="InProc" stateConnectionString="tcpip=SampleStateServer:42424" cookieless="false" timeout="1">
39 </sessionState>
40 </system.web>
41 </configuration>
二、具體參數說明
在Web.Config文件中需增加<SessionState>節點,各屬性說明:
mode:指定存儲會話狀態值的位置。"InProc"表示會話處於正在處理 ASP.NET 輔助進程的狀態。
stateConnectionString:指定遠程存儲會話狀態的服務器名稱或地址以及端口。端口值必須為 42424。默認值為 "tcpip=127.0.0.1:42424"。
cookieless:指定對於 Web 應用程序使用 Cookie 的方式。false為不使用。