网站访问量的统计(Application和Session应用)

时间:2024-04-16 21:13:27

下面介绍如何进行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为不使用。