一个简单的网页计数器

今天写了一个最简单的计数器,实现的功能很简单,可以记录总访问数及今日访问数。代码如下:
复制  保存
// ********************************************************
// 网页计数器控件
// Designed by Faib Studio.
// Copyright 2007
// Email faib920@126.com or QQ 55570729
// ********************************************************

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Drawing.Design;
using System.IO;
using System.Text;

namespace FaibClass.WebControls
{
    [ToolboxData("<{0}:Counter runat=server></{0}:Counter>")]
    public class Counter : Label
    {
        #region 私有变量
        private string m_FileName = "";
        private string m_ImageUrl = "";
        private int m_Length = 5;
        private int m_TotalCount, m_TodayCount;
        private bool m_OnlyIcon = false;
        #endregion

        public Counter()
        {
        }
        #region 属性
        [Browsable(false)]
        public override string Text
        {
            get { return base.Text; }
            set { base.Text = value; }
        }

        [Category("Appearance"),
        Description("保存计数的文本文件路径。"),
        Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string FileName
        {
            get { return m_FileName; }
            set { m_FileName = value; }
        }

        [Category("Appearance"),
        Description("使用图象来显示计数,数字使用通配符?代替。"),
        Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))]
        public string ImageUrl
        {
            get { return m_ImageUrl; }
            set { m_ImageUrl = value; }
        }

        [Category("Appearance"),
        Description("显示计数的默认长度。"),
        DefaultValue(5)]
        public int Length
        {
            get { return m_Length; }
            set { m_Length = value; }
        }

        [Category("Appearance"),
        Description("是否只在界面上显示一个图标。"),
        DefaultValue(false)]
        public bool OnlyIcon
        {
            get { return m_OnlyIcon; }
            set { m_OnlyIcon = value; }
        }

        //总访问量
        [Browsable(false)]
        public int TotalCount
        {
            get { return m_TotalCount; }
            set { m_TotalCount = value; }
        }

        //今日访问量
        [Browsable(false)]
        public int TodayCount
        {
            get { return m_TodayCount; }
            set { m_TodayCount = value; }
        }

        #endregion
        #region 公共方法
        protected override void OnLoad(EventArgs e)
        {
            int counter = 0, todaycounter = 0;
            DateTime today = DateTime.MinValue;
            StringBuilder builder = new StringBuilder();
            if (Util.IsDesignMode(Page))//是否设计模式
            {
                Random rad = new Random();
                if (m_ImageUrl.Length == 0)
                {
                    if (m_OnlyIcon)
                    {
                        builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
                    }
                    else
                    {
                        for (int i = 0; i < m_Length; i++)
                        {
                            builder.Append(rad.Next(9).ToString());
                        }
                    }
                }
                else
                {
                    if (m_OnlyIcon)
                    {
                        builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
                    }
                    else
                    {
                        for (int i = 0; i < m_Length; i++)
                        {
                            builder.Append("<img src=/"" + m_ImageUrl.Replace("?", rad.Next(9).ToString()) + "/" align=absmiddle>");
                        }
                    }
                }
            }
            else
            {
                bool blnExists = File.Exists(Page.Server.MapPath(m_FileName));
                if (blnExists)//读出访问量
                {
                    StreamReader str = File.OpenText(Page.Server.MapPath(m_FileName));
                    try
                    {
                        counter = int.Parse(str.ReadLine());
                        todaycounter = int.Parse(str.ReadLine());
                        today = DateTime.Parse(str.ReadLine());
                    }
                    catch
                    {
                        throw new Exception("文件内容为空,请将文件删除");
                    }
                    finally
                    {
                        str.Close();
                    }
                }

                if (Page.Session["__Counter"] == null)
                {
                    counter++;
                    todaycounter++;
                    if (today != DateTime.Today)
                    {
                        today = DateTime.Today;
                    }
                }
                string s = counter.ToString();
                Attributes.Add("title", "总计: " + s + ", 今日: " + todaycounter.ToString());
                if (m_OnlyIcon)
                {
                    builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
                }
                else
                {
                    if (s.Length < m_Length)
                    {
                        if (m_ImageUrl.Length == 0)
                        {
                            for (int i = 0; i < m_Length - s.Length; i++)
                            {
                                builder.Append("0");
                            }
                        }
                        else
                        {
                            for (int i = 0; i < m_Length - s.Length; i++)
                            {
                                builder.Append("<img src=/"" + m_ImageUrl.Replace("?", "0") + "/" align=absmiddle>");
                            }
                        }
                    }
                    if (m_ImageUrl.Length == 0)
                    {
                        builder.Append(s);
                    }
                    else
                    {
                        for (int i = 0; i < s.Length; i++)
                        {
                            builder.Append("<img src=/"" + m_ImageUrl.Replace("?", s.Substring(i, 1)) + "/" align=absmiddle>");
                        }
                    }
                }

                //将新的访问量写入文件
                if (Page.Session["__Counter"] == null)
                {
                    StreamWriter stw = new StreamWriter(Page.Server.MapPath(m_FileName));
                    stw.WriteLine(counter.ToString());//写入总计
                    stw.WriteLine(todaycounter.ToString());//写入日期
                    stw.WriteLine(today.ToShortDateString());//写入今日访问量
                    stw.Close();

                    Page.Session["__Counter"] = 1;//标识
                }
            }
            Text = builder.ToString();
            m_TotalCount = counter;
            m_TodayCount = todaycounter;
            base.OnLoad(e);
        }
        #endregion
    }
}
 
ASP+ACCESS的版本安装说明: 1.需要支持ASP和Access数据库的空间。 2.超级管理员登陆页面:qqcf_admin.asp,默认用户名为:www.qqcf.com,密码:www.qqcf.com,请安装后立即修改! 3.计数器的图片制作的PhtoShop和Flash源文件放在QQCF_Pic目录里,你可以修改成你自己的图片,当然也可以自己做啦。 4.如果忘记密码请打开数据库修改,把Password字段的对应值修改为254a978baaa071ad,这样密码就变为www.qqcf.com 5.免费版请保留版权使用,作者不对其作品付任何责任,你可以任意传播。 6.未经作者许可请勿用于任何商业用途。 7.计数器的MsSql版,采用DLL组件、存储过程、事务编写,支持百万级数据量,提供免费下载,无任何限制,只需保留版权使用即可,需要的朋友请到作者网站http://www.qqcf.com下载。 8.必须接受以下乘风原创程序用户协议方可以使用本计数程序 功 能: 1.总共60记数器图片样式自由选择,并且可以方便地增加记数器图片样式。 2.可以设置计数器显示数字,显示位数,计数器是否隐藏,统计信息是否公开等。 3.页面显示记数和IP防刷新记数两种记数模式,支持Script方式和Img方式调用计数器代码。 4.可以记录来访客的来源IP地址和来源页面信息,在线人数。 5.每月、每天和每小时的访问数据统计,回头率统计,每个网页浏览统计。 6.搜索引擎统计,还可以自己定义搜索引擎,搜索关键字统计。 7.注册用户找回密码功能,用户可以重置统计,删除注册账号。 8.多用户计数器,具有管理注册用户功能。 9.系统会自动删除过多的以前的无用的来源和在线记录,保证系统快速稳定运行,还可以在线压缩数据库。 10.增加计数器图片样式的方法:把新的计数器图片复制到qqcf_counterpic目录,然后设置样式数量即可。 11.安全性:密码MD5加密,注册、登陆使用验证码,完全防Sql注入 独有的特色: 1.计数器数字图片和统计图标两种机制共存,众多设置可调。 2.Script和Img两种方式调用计数器,Img方式计数器可以在任何能插入图片的地方使用。 3.独有的错误自动修复机制,能在计数器发生错误后自动修复。 4.完全杜绝并发线程容易对数据库造成的损坏,在流量大的网站上使用表现很稳定。 5.缓存机制,在缓存中保存数据,操作常见动作,大量减少对数据库的增加,删除频繁的操作。 6.稳定性、安全性、速度上表现都很优秀,功能齐全,代码集成程度高、完全公开,专业制作,完全免费。 乘风原创程序用户协议 乘风原创程序作者(以下简称作者)在此特别提醒,用户(您)欲使用乘风原创程序(以下简称乘风程序),必须事先认真阅读本协议,包括免除或者限制作者的免责条款及对用户的权利限制。请您审阅并接受或不接受本服务条款(未成年人审阅时应得到法定监护人的陪同)。如您不
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值