首页 新闻 会员 周边 捐助

有关全局应用程序类的问题

0
悬赏园豆:5 [已解决问题] 解决于 2009-06-17 17:00

最近我正在学习有关网站的状态管理的知识,遇到了一下的问题,希望哪位高手指点一下。

我想做一个网站计数的小程序。程序我已做好,只是我想能不能通过手动的修改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() + "位登陆本页面者!");
    }

Follow heart的主页 Follow heart | 初学一级 | 园豆:175
提问于:2009-06-06 21:38
< >
分享
最佳答案
0

你在网站启动的时候读入了文本,并存入Application["count"],此后只是在有新访问时增加Application["count"]的值,在网站开着的时候,你对文本的修改当然是不起作用的,你需要在网站启动之前修改文本。

另外,如果你想做网站统计功能的话,建议还是别想了,现在都使用第三方程序来做统计,比如Google、量子一类的,首先因为它们做的已经非常成熟了,功能全面、详尽,更主要的是它不会耗费你宝贵的服务器资源,所以自己做这块纯属费力不讨好,根本没有必要,我以前也曾走过这块误区。

斯克迪亚 | 老鸟四级 |园豆:4124 | 2009-06-09 03:47
其他回答(1)
0

我看了一下代码,这种情况下应该是:

如果用IIS作为宿主运行的话,那么你打开IE进入后显示你是第1位,刷新N次都是第1位,关了IE再开再访问就是第2位

如果用VS的调试直接打开的话,进去后显示第1位,刷新显示第1位,关了调试再打开调试进去还是第1位

 

如果和我说的有什么出入,请告诉我具体的区别在哪里

Gray Zhang | 园豆:17610 (专家六级) | 2009-06-06 22:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册