ASP.NET MVC实现网站验证码功能
2015-10-29 14:11
806 查看
网站添加验证码,主要为防止机器人程序批量注册,或对特定的注册用户用特定程序暴力破解方式,以进行不断的登录、灌水等危害网站的操作。验证码被广泛应用在注册、登录、留言等提交信息到服务器端处理的页面中。
在ASP.NET网站中应用验证码是很容易的,网上有很多的解决方案。最近在做一个OA项目,因系统采用的ASP.NET MVC框架,同样在登录页中需用到验证码,故需将原来在ASP.NET网站中使用的验证码移植到ASP.NET MVC中。
原ASP.NET网站用来生成验证码的类文件ValidateCode.cs:
View Code
在Controller.cs中,添加Action,用来设置将生成的验证码存入Session,并输出验证码图片:
调用方式为:在需要使用验证码的页面中,加入<img>标签:
<img id="valiCode" style="cursor: pointer;" src="../Account/GetValidateCode" alt="验证码" />
到于Account/Login这个Action中的处理,只需加入对Session中验证码的判断:
为实现登录页中,点击图片切换验证码,可以登录页中加入此JS代码实现刷新验证码:
在ASP.NET网站中应用验证码是很容易的,网上有很多的解决方案。最近在做一个OA项目,因系统采用的ASP.NET MVC框架,同样在登录页中需用到验证码,故需将原来在ASP.NET网站中使用的验证码移植到ASP.NET MVC中。
原ASP.NET网站用来生成验证码的类文件ValidateCode.cs:
/// <summary> /// 创建验证码的图片 /// </summary> /// <param name="containsPage">要输出到的page对象</param> /// <param name="validateNum">验证码</param> public byte[] CreateValidateGraphic(string validateCode) { Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22); 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 Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic)); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(validateCode, font, brush, 3, 2); //画图片的前景干扰点 for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); //保存图片数据 MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //输出图片流 return stream.ToArray(); } finally { g.Dispose(); image.Dispose(); } }
View Code
在Controller.cs中,添加Action,用来设置将生成的验证码存入Session,并输出验证码图片:
public ActionResult GetValidateCode() { ValidateCode vCode = new ValidateCode(); string code = vCode.CreateValidateCode(5); Session["ValidateCode"] = code; byte[] bytes = vCode.CreateValidateGraphic(code); return File(bytes, @"image/jpeg"); }
调用方式为:在需要使用验证码的页面中,加入<img>标签:
<img id="valiCode" style="cursor: pointer;" src="../Account/GetValidateCode" alt="验证码" />
到于Account/Login这个Action中的处理,只需加入对Session中验证码的判断:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Login(string userName, string password, bool rememberMe, string returnUrl,string code) { if (Session["ValidateCode"].ToString() != code) { ModelState.AddModelError("code", "validate code is error"); return View(); } //此处验证用户名、密码 if (!ValidateLogOn(userName, password)) { return View(); } //验证成功 FormsAuthentication.SetAuthCookie(userName, rememberMe); if (!String.IsNullOrEmpty(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } }
为实现登录页中,点击图片切换验证码,可以登录页中加入此JS代码实现刷新验证码:
<script type="text/javascript" src="http://www.cnblogs.com/Scripts/jquery-1.3.2-vsdoc.js"></script> <script type="text/javascript"> $(function() { $("#valiCode").bind("click", function() { this.src = "../Account/GetValidateCode?time=" + (new Date()).getTime(); }); //alert("good"); }); </script>
相关文章推荐
- 创建一个完整的ASP.NET Web API项目
- Asp.Net 之 缓存机制
- 个人笔记 asp 04 循环读取数据库并用表格显示
- ASP中Excel导入到数据库。
- ASP脚本组件实现服务器重启
- 个人笔记 asp 03 链接ACCESS数据库并使用recordset数据集
- ASP.NET Web API 简介
- 个人笔记 asp 02 cookis实现访问次数计数器
- 个人笔记 asp 01 发送电子邮件
- maven构建项目时,出现aspectj-maven-plugin 无法构建的问题
- ASP.NET中使用FTP
- The service cannot be activated because it does not support ASP.NET compatibility
- 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示
- ASP.NET动态添加控件(感想)
- ASP跨域调用Webservices方法
- 创建一个完整的ASP.NET Web API项目
- ASP.NET中Web API的简单实例
- ASP.NET服务器控件OnClientClick事件中Eval()作为js方法的参数的一种写法
- metasploit渗透测试(一)在 Mac 安装 Metasploit-framework
- ASP.NET中服务器控件的生命周期