最近我正在学习有关网站的状态管理的知识,遇到了一下的问题,希望哪位高手指点一下。
我想做一个网站计数的小程序。程序我已做好,只是我想能不能通过手动的修改vistCount.txt文件中的数据来改变网站的访问次数。我试了一下,发现我修改了vistCount.txt文件中的数据但是得到的结果却仍然是实际的访问次数。我仔细的看了程序,我认为通过修改vistCount.txt文件中的数据得到的结果应该是修改后的数据加1.我实在是不知为什么了。希望哪位高手给我解释一下。
全局应用程序类文件的代码如下:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO"%>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
//将VisitCount.txt文件的路径保存在Application对象中
Application["strPath"] = Server.MapPath(null) + @"\VisitCount.txt";
string strPath = Application["strPath"].ToString();
if (File.Exists(strPath))
{
StreamReader sr = new StreamReader(strPath);//构造StreamReader流对象
String strCount;
strCount = sr.ReadToEnd();
if (strCount != "")
Application["count"] = Convert.ToInt32(strCount);
else
Application["count"] = 0;
sr.Close();
}
else
{
StreamWriter sw = File.CreateText(strPath);//创建文本文件,并且返回StreamWriter流
Application["count"] = 0;
sw.Write(Application["count"].ToString());
sw.Close();
}
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
}
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
string strPath = Application["strPath"].ToString();
Application.Lock();
Application["count"] = System.Convert.ToInt32(Application["count"]) + 1;
StreamWriter sw = new StreamWriter(strPath);
sw.Write(Application["count"].ToString());
sw.Close();
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
}
</script>
aspx文件如下:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("你是第" + Application["count"].ToString() + "位登陆本页面者!");
}
你在网站启动的时候读入了文本,并存入Application["count"],此后只是在有新访问时增加Application["count"]的值,在网站开着的时候,你对文本的修改当然是不起作用的,你需要在网站启动之前修改文本。
另外,如果你想做网站统计功能的话,建议还是别想了,现在都使用第三方程序来做统计,比如Google、量子一类的,首先因为它们做的已经非常成熟了,功能全面、详尽,更主要的是它不会耗费你宝贵的服务器资源,所以自己做这块纯属费力不讨好,根本没有必要,我以前也曾走过这块误区。
我看了一下代码,这种情况下应该是:
如果用IIS作为宿主运行的话,那么你打开IE进入后显示你是第1位,刷新N次都是第1位,关了IE再开再访问就是第2位
如果用VS的调试直接打开的话,进去后显示第1位,刷新显示第1位,关了调试再打开调试进去还是第1位
如果和我说的有什么出入,请告诉我具体的区别在哪里