【猴岛技术组】基于B/S登录验证页面

社区服务
高级搜索
猴岛论坛电脑百科【猴岛技术组】基于B/S登录验证页面
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
7个回复

[技术小组]【猴岛技术组】基于B/S登录验证页面

楼层直达
幻希空

ZxID:17414929

等级: 元老
一片花飞减却春          风飘万点正愁人

举报 只看楼主 使用道具 楼主   发表于: 2012-09-24 0
环境:VS2008以上,ASP.NET
数据库:SQL2008
使用语言:C#、JS、HTML

功能介绍:只是一个简单的设计,此处登录的是采用的网页登录方式,即B/S。
具体实现:1、验证用户名和密码是否输入正确。
                  2、验证码采用图片输出,并且验证输入是否正确。
                  3、密码采用MD5验证(存进去就是MD5,存进去本文不做介绍,可以自己研究下,改个SQL语句即可)

在登录界面,使用3 个Label 分别显示“ID”、“密码”和“验证码”。接着使用3 个TextBox 控件,用来让用户输入ID、密码和验证码。其次使用3 个RequiredFieldValidator 来实现对ID、密码和验证码是否输入的验证提示。ValidationSummary 来显示错误的验证信息。
使用一个普通按钮(button )让用户在单击按钮控件时,引发btnSubmit_Click ()事件进行网页跳转,使用一个图形显示控件Image 显示验证码图片。

建立一个ASP.NET网站
btnSubmit_Click()触发事件
protectedvoid btnSubmit_Click(object sender, EventArgs e)
{
if (txtValidCode.Text.ToUpper().Equals(Session["ValidCode"].ToString().ToUpper()))     //输入验证码时无论是大小写皆读取为大写,方便验证
   {
    boolbFlag = new DataClass().IsUserExist(int.Parse(txtID.Text.ToString().Trim()), txtPwd.Text);   //调用了自定义类中的验证用户和密码是否存在的方法
     if (bFlag)
    {
     Response.Write("<script>alert('ID 和密码输入正确!')</script>");   //验证成功
    }
    else
   {
    Response.Write("<script>alert('ID 和密码输入错误,请重新输入!')</script>");  //用户米密码验证失败
   }
  }
   else
{
  Response.Write("<script>alert('验证码输入错误,请重新输入!')</script>");   //验证码验证失败
}
}

类DataClass(自己添加一个类文件)
public class DataClass
{
    public DataClass()
    {
            //构造函数
    }
   // 获取Sql Server 2008数据库连接
    // <returns>返回一个已经建立的连接</returns>
    private SqlConnection GetSqlServerConn()
    {
        SqlConnection sqlConn;                  //定义SQl Server连接对象
        string sConnection = "Data Source=localhost;Initial Catalog=DB_1;User ID=sa;Password=sa123;";      
        //直接使用语句,localhost表示连接本地数据库,你可以改成你要的IP里的数据库,这里就涉及到服务器的设计了,此处就不介绍了。Initial Catalog数据库的名字,User ID数据库用户名,Password数据库密码。当然这里你可以读取web.config配置文件的ConnectionString节点获取连接字符串,程序安全性可以提高。
        sqlConn = new SqlConnection(strConn);   //生成数据库连接对象
        sqlConn.Open();                         //打开数据库连接
        return sqlConn;                          //返回数据库连接对象以供调用
    }

    // 关闭已打开的数据库连接
    private void CloseSqlServerConn(SqlConnection sqlConn)
    {
        if (sqlConn.State == ConnectionState.Open) //如果数据库连接处于关闭状态,则打开此连接
        {
            sqlConn.Close();
        }
    }

   // 判断指定的用户是否存在
    // <returns>返回判断结果:true 存在; false 不存在</returns>

    public bool IsUserExist(int iID, string strPwd)
    {
        string strComm = "select * from [UserInfo] where id=@id and pwd=@pwd";

        SqlConnection sqlConn = this.GetSqlServerConn();                //调用GetSqlServerConn()方法获得数据库连接
        SqlCommand sqlComm = new SqlCommand();                         //生成数据库命令操作对象
        try
        {
            sqlComm.CommandText = strComm;                             //指定要执行的SQL命令            sqlComm.Connection = sqlConn;                                   //指定要使用的SQL连接
            sqlComm.Parameters.AddWithValue("@ID", iID);           //为SQL命令的参数赋值
            sqlComm.Parameters.AddWithValue("@Pwd", GetMD5(strPwd));
          
            object obj = sqlComm.ExecuteScalar();                       //执行SQL命令返回第一行第一列的值
            if (int.Parse(obj.ToString()) > 0)                                 //判断是否存在数据
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch (Exception ex)
        {
            return false;
        }
        finally
        {
            this.CloseSqlServerConn(sqlConn);                           //调用方法关闭数据库
        }
    }   private string GetMD5(string strPwd)
{ //之前已经发过此段程序,此处不再发。
  }
}

验证码要添加一个ashx文件(一般处理程序)。
public class Valid : IHttpHandler, IRequiresSessionState
{
    // 生成随机字符串
    // <param name="num">随机字符的个数</param>
    private string GetValidCode(int num)
    {        string strRandomCode = "AB1CDEF2GH3IJ4KL5MN6P7QR8ST9UVWXYZ";                                //定义要随机抽取的字符串
        char[] chastr = strRandomCode.ToCharArray();                                                                           //将定义的字符串转成字符数组
        StringBuilder sbValidCode = new StringBuilder();                                                                         //定义StringBuilder对象用于存放验证码
        Random rd = new Random();                                                                                                       //随机函数,随机抽取字符
        for (int i = 0; i < num; i++)
        {
           //以strRandomCode的长度产生随机位置并截取该位置的字符添加到StringBuilder对象中
            sbValidCode.Append(strRandomCode.Substring(rd.Next(0, strRandomCode.Length), 1));
        }
        return sbValidCode.ToString();      
    }    public void ProcessRequest(HttpContext context)
    {
        string strValidCode = GetValidCode(5);                                                     // 产生5位随机字符
        context.Session["ValidCode"] = strValidCode;                                            //将字符串保存到Session中,以便需要时进行验证
        Bitmap image = new Bitmap(120, 30);                                                        //定义宽120像素,高30像素的数据定义的图像对象
        Graphics g = Graphics.FromImage(image);                                                //绘制图片
        try
        {            Random random = new Random();                                                       //生成随机对象
            g.Clear(Color.White);                                                                            //清除图片背景色
            for (int i = 0; i < 25; i++)                                                                        // 随机产生图片的背景噪线
            {
                int x1 = random.Next(image.Width);
                int x2 = random.Next(image.Width);
                int y1 = random.Next(image.Height);
                int y2 = random.Next(image.Height);
                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
            }            Font font = new System.Drawing.Font("新宋体", 20, (System.Drawing.FontStyle.Bold));  //设置图片字体风格
            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 3, true);            //设置画笔类型
            g.DrawString(strValidCode, font, brush, 5, 2);                                     //绘制随机字符
            g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);    //绘制图片的前景噪点
            System.IO.MemoryStream ms = new System.IO.MemoryStream();                            //建立存储区为内存的流
            image.Save(ms, ImageFormat.Gif);                                                                           //将图像对象储存为内存流
            context.Response.ClearContent();                                                                            //清除当前缓冲区流中的所有内容
            context.Response.ContentType = "image/Gif";                                                         //设置输出流的MIME类型
            context.Response.BinaryWrite(ms.ToArray());                                                          //将内存流写入到输出流
        }
        finally
        {
            g.Dispose();
            image.Dispose();
        }
    }    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
以上步骤基本完成所有内容设计,但是在调试过程中,时常在验证码输出部分出现未实例化错误,为了解决这一问题,添加了一段JS程序,来刷新验证码。加在登录页面的,aspx文件中。  
  <script type="text/javascript">
        function resfreshValidateCode() {
            var img = document.getElementById("imgValidCode");
            img.src = "ValidCode.ashx?"+Math.random();
        }
    </script>
思路和所有程序已经贴出来了,也是3个多月前写的了,简化了下,验证码那,可以不用图片显示的操作,直接数据输出也可以。那个问我要C#登录设计的猴子可以看下,已经很全面。数据库的设置还有设计,我就不写了,百度一堆。数据库的选择随你,不过语句记得调换。懒得打包,自己调试。
[ 此帖被幻希空°在2012-09-24 15:37重新编辑 ]
本帖de评分: 3 条评分 DB +300
DB+100 2012-09-24

请不要灌水

DB+100 2012-09-24

我很赞同

DB+100 2012-09-24

我很赞同

交易区
幻希空

ZxID:17414929

等级: 元老
一片花飞减却春          风飘万点正愁人

举报 只看该作者 沙发   发表于: 2012-09-24 0
手打原创,非转载,有兴趣的研究,有问题可消息我。
交易区
艾迪西

ZxID:15163219


举报 只看该作者 板凳   发表于: 2012-09-24 0
前排
秋风挽诗。

ZxID:13254577

等级: 元老
欲变世界,先变自身。

举报 只看该作者 地板   发表于: 2012-09-24 0
收藏了,感谢分享啊
她,说
我为机狂

ZxID:18240933

等级: 元老

举报 只看该作者 4楼  发表于: 2012-09-24 0
我们鼓励任何人发表原创作品
初一°

ZxID:1428937

等级: 元老
配偶: 槍與玫瑰

举报 只看该作者 5楼  发表于: 2012-09-24 0
我会告诉你这些我根本看不懂?

楼主留言:

看不懂就看不懂呗

   姜馨瑜、

ZxID:19614929

等级: 大尉
                        轻轻的我走了
举报 只看该作者 6楼  发表于: 2012-09-24 0






猴岛有你更精彩。



,凸騲

ZxID:17376391

等级: 元老

举报 只看该作者 7楼  发表于: 2012-09-24 0
  看不懂。
« 返回列表
发帖 回复