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

下面介绍如何进行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
步骤5:
配置Web.Config文件,完整代码如下。
 1 xml version="1.0"?>
2
10 <configuration>
11 <appSettings/>
12 <connectionStrings/>
13 <system.web>
14
20 <compilation debug="true"/>
21
26 <authentication mode="Windows"/>
27
38 <sessionState mode="InProc" stateConnectionString="tcpip=SampleStateServer:42424" cookieless="false" timeout="1">
39 sessionState>
40 system.web>
41 configuration>
二、具体参数说明
在Web.Config文件中需增加节点,各属性说明:
mode:指定存储会话状态值的位置。"InProc"表示会话处于正在处理 ASP.NET 辅助进程的状态。
stateConnectionString:指定远程存储会话状态的服务器名称或地址以及端口。端口值必须为 42424。默认值为 "tcpip=127.0.0.1:42424"。
cookieless:指定对于 Web 应用程序使用 Cookie 的方式。false为不使用。





你可能感兴趣的:(网站访问量的统计(Application和Session应用))