写得太乱了,分层啊。在BLL层中
if(所发条数<3)
{
  Add();
}

解决方案 »

  1.   


    这个是做了判断的: if (today_add(cookie_name))
                        {
                            Label1.Text = cookie_name;
                        }                    else
                        {
                            Response.Redirect("msg.aspx?action=today_2", true);
                        }
    /// <summary>
            /// 检测用户今日发了几条信息
            /// </summary>
            /// <param name="username">用户名</param>
            /// <returns>返回true或者false</returns>
            private bool today_add(String username)
            {
                conn reader = new conn();
                OleDbDataReader request = reader.ReadUser(username);
                request.Read();
                Int32 num = Convert.ToInt32(request["tody_num"].ToString());
                DateTime day =Convert.ToDateTime(request["tody_day"].ToString());
                reader.CloseDB();
                DateTime nowtime = DateTime.Now;
                if (nowtime.ToShortDateString().ToString() == day.ToShortDateString().ToString() && num >= 3)
                {
                    return false;//今日已经发了3条信息了
                }
                else
                {
                    return true;
                }
            }还有个问题就是默认新发布的都是未审核的,但是他发的直接就审核通过了,所以怀疑他是直接通过页面写入数据库的。我想在入库页面做个判断页面来源,不知道怎么做
      

  2.   

    无奈再看一看你的代码,我想不会是这个原因吧,
                        if (today_add(cookie_name))
                        {
                            Label1.Text = cookie_name;
                        }                    else
                        {
                            Response.Redirect("msg.aspx?action=today_2", true);
                        }
    真正发新闻的是这个页msg.aspx
    但是你验证的是add_new这个页,如果,用户不通过这个add_new 页进入msg.aspx页,
    而是通过浏览器直接写入msg.aspx页地址进入msg.aspx页,你的验证,还有什么用昵?????
      

  3.   

    .add_new
    这个代码 用存储过程。如果还不行 发信息的时候用验证码最好在插入的时候加入IP限制
      

  4.   

    Response.Redirect("msg.aspx?action=today_2", true);
    这个不是发布信息页面,二是信息提示页面,提示今日已经发布超过3条信息了。
      

  5.   

    我大概写下我的程序运行思路和过程:
    打开发布页面,先检查是否有效登录,不是则跳转登录页面如已登录,则检查当前登录用户今日发布多少信息,如果已经发布3条了,则跳转到提示页,提示已经发布3条信息了。如果检查到今日还么有发布或者还没发够3条信息,则显示信息发布界面,让用户填写相关选项,然后入库,并且入库的时候直接是设置为未审核的。我现在想不明白的是,就算页面有漏洞,可以无限制发布,但是这个发布就直接显示是什么道理呢?请看这个写入的语句: 
    //写入数据
                    add.add_new(id,title, content, clas, area, publishers, qq, telephone, intermediary, set_top, duration, nowtime);这个是入库代码:
     public void add_new(String id, String title, String content, String clas, String area, String publishers, String qq, String telephone, Int32 intermediary, DateTime set_top, Int32 duration, DateTime date_time)
            {
                OpenDB();
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "insert into data ([id],[title],[content],[class],[area],[publishers],[qq],[telephone],[number],[intermediary],[set_top],[duration],[date_time],[jubao]) values(@id,@title,@content,@class,@area,@publishers,@qq,@telephone,@number,@intermediary,@set_top,@duration,@date_time,@jubao)";
                cmd.Parameters.Add("@id", OleDbType.VarChar, 14);
                cmd.Parameters.Add("@title",OleDbType.VarChar, 20);
                cmd.Parameters.Add("@content",OleDbType.VarChar, 310);
                cmd.Parameters.Add("@class",OleDbType.VarChar, 6);
                cmd.Parameters.Add("@area",OleDbType.VarChar, 6);
                cmd.Parameters.Add("@publishers",OleDbType.VarChar, 12);
                cmd.Parameters.Add("@qq",OleDbType.VarChar,12);
                cmd.Parameters.Add("@telephone",OleDbType.VarChar,12);
                cmd.Parameters.Add("@number",OleDbType.Integer, 1);
                cmd.Parameters.Add("@intermediary",OleDbType.Integer, 1);
                cmd.Parameters.Add("@set_top",OleDbType.Date);
                cmd.Parameters.Add("@duration",OleDbType.Integer, 2);
                cmd.Parameters.Add("@date_time",OleDbType.Date);
                cmd.Parameters.Add("@jubao", OleDbType.Integer, 2);
                cmd.Parameters["@id"].Value = id;
                cmd.Parameters["@title"].Value = title;
                cmd.Parameters["@content"].Value = content;
                cmd.Parameters["@class"].Value = clas;
                cmd.Parameters["@area"].Value = area;
                cmd.Parameters["@publishers"].Value = publishers;
                cmd.Parameters["@qq"].Value = qq;
                cmd.Parameters["@telephone"].Value = telephone;
                cmd.Parameters["@number"].Value = 0;
                cmd.Parameters["@intermediary"].Value = intermediary;
                cmd.Parameters["@set_top"].Value = set_top;
                cmd.Parameters["@duration"].Value = duration;
                cmd.Parameters["@date_time"].Value = date_time;
                cmd.Parameters["@jubao"].Value = 5;
                cmd.Connection = connstr;
                cmd.ExecuteNonQuery();
                CloseDB();
            }
    其中红色的5是代表未审核的,他是如何能修改到这个数值的呢?这个数值不是从页面提交过来的,二是程序内部直接赋值,也就是说只要有数据入库,那么这个字段都是5,代表未审核。
      

  6.   

    晕,引用内不能有颜色,这行:cmd.Parameters["@jubao"].Value = 5;5是代表未审核的,他是如何能修改到这个数值的呢?这个数值不是从页面提交过来的,二是程序内部直接赋值,也就是说只要有数据入库,那么这个字段都是5,代表未审核。想不通
      

  7.   

    这代码差不多是人家说什么他就信什么            Int32 num = Convert.ToInt32(request["tody_num"].ToString());
                DateTime day =Convert.ToDateTime(request["tody_day"].ToString());
                reader.CloseDB();
                DateTime nowtime = DateTime.Now;
                if (nowtime.ToShortDateString().ToString() == day.ToShortDateString().ToString() && num >= 3)
                {
                    return false;//今日已经发了3条信息了
                }
                else
                {
                    return true;
                }