【发布时间】:2013-07-12 21:48:50
【问题描述】:
我正在创建一个具有母版页的网站。我想创建一个计数器来记录访问者的数量,我找到了一个代码并将其放在我的母版页中。代码如下: 标记代码:
<%@ 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>
但我网站中的每个页面都会在我访问它们时触发计数器。请帮我修改这段代码,让一位访客只触发一次计数器。
我决定只将代码放在索引页面上,但每次刷新和每次打开索引的舔(即使停留在索引页面上)都会触发计数器。
【问题讨论】:
-
当然,如果两个访问者同时运行
countMe方法,您很可能会 a) 如果 I/O 发生在错误的时间和/或者您最终只会计算一次访问(两者都读取计数 73,都向其添加 1,都保存更新后的 XML,计数为 74)。您存储在 XML 文件中的任何原因?