ASP.. NET访问者计数器
本文关键字:计数器 访问者 NET ASP | 更新日期: 2023-09-27 18:09:41
我正在为我的网页创建一个计数器。我想要实现的是,每次用户访问我的asp.net应用程序时,它都将其数据存储到数据库中。我用的是Global。asax和事件Application_Start。这是我的代码。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
WebpageCounter.SaveVisitor(new WebpageVisitor()
{
VisitorIP = HttpContext.Current.Request.UserHostAddress,
VisitedOn = DateTime.Now
});
}
但是它从不将任何东西存储到数据库中。SaveVisitor函数已经过测试,它是功能性的。
有什么建议吗?
Application_Start()
在应用程序域的生命周期内只被调用一次,而不是对您站点的每个请求都调用。参见"ASP。. NET应用程序生命周期概述"
后面代码的代码:
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"));
}
VB。净
Protected Sub Page_Load(sender As Object, e As EventArgs)
Me.countMe()
Dim tmpDs As New DataSet()
tmpDs.ReadXml(Server.MapPath("~/counter.xml"))
lblCounter.Text = tmpDs.Tables(0).Rows(0)("hits").ToString()
End Sub
Private Sub countMe()
Dim tmpDs As New DataSet()
tmpDs.ReadXml(Server.MapPath("~/counter.xml"))
Dim hits As Integer = 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"))
End Sub
XML文件看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<counter>
<count>
<hits>0</hits>
</count>
Application_Start仅在进程创建时运行,而不是每次访问。
你可以用Application_BeginRequest代替
IIS可以记录这些信息,然后使用出色的日志解析器进行查询/转换。你也可以把谷歌分析放在你的网站上——它的免费版本对所有网站都足够了,除了最繁忙的网站。如果你仍然觉得有必要自己做这件事,那么Application_BeginRequest
是一个更好的记录这个的地方。
EDIT:你可以实现它作为一个模块,像MSDN自定义模块漫步,然后你的应用程序可以更模块化一点