前言

技巧点总结非常重要,等到在自己做项目中突然想用到了,可以来看看自己的博客,算是积累自己代码库的一种方式。下面小编对于牛腩新闻系统中的“验证码功能”方法做一下总结。

一、代码段

使用一个一般处理程序文件.ashx, WaterMark.ashx

1.先创建WaterMark.ashx文件,编写如下代码:

<%@ WebHandler Language = "C#"  Class="WaterMark" %>using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Windows;
//需要添加的引用
using System.Drawing;
using System.Drawing.Drawing2D;//二维的图形或图像
using System.Web.SessionState;namespace NewSystem.handler
{/// <summary>/// WaterMark 的摘要说明/// </summary>public class WaterMark : IHttpHandler, IRequiresSessionState//要使用session必须实现该接口{public void ProcessRequest(HttpContext context){//产生5位随机字符string checkCode = GenCode(5);//将字符串保存到session中,以便需要时进行验证context.Session["Code"] = checkCode;//产生宽70,高22的位图System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);//从指定的image(容器,用户装载图画)中创建新的Graphics//(工具,用于操作图画)Graphics g = Graphics.FromImage(image);try{//生成随机生成器Random random = new Random();//清空图片背景色g.Clear(Color.White);//画图片的背景噪音线int i;for (i = 0; i < 25; i++){int x1 = random.Next(image.Width);int x2 = random.Next(image.Width);int y1 = random.Next(image.Width);int y2 = random.Next(image.Width);g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);}//设置字体样式Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));System.Drawing.Drawing2D.LinearGradientBrushbrush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed,1.2F, true);//文本字符串格式,字体样式,文本样式,文本起始左上角x,yg.DrawString(checkCode, font, brush, 2, 2);g.DrawString(checkCode, font, brush, 2, 2);//文本字符串格式,字体样式,文本样式,文本起始左上角x,y//画图片的前景噪音点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, System.Drawing.Imaging.ImageFormat.Gif);//指定的文件,指定的格式,图像格式context.Response.ClearContent();//清楚缓冲区流的所有内容输出context.Response.ContentType = "image/Gif";context.Response.BinaryWrite(ms.ToArray());//将一个二进制字符串写入HTTP流中(将流内容写入字符数组)}finally{g.Dispose();//释放资源image.Dispose();//释放image占用的资源}}public bool IsReusable{get{return false;}}/// <summary>/// 产生随机字符串/// </summary>/// <param name="num">随机出几个字符</param>/// <returns>随机出的字符串</returns>private string GenCode(int num){string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";            char[] chastr = str.ToCharArray();string code = "";Random rd = new Random();int i;for (i = 0; i < num; i++){//产生随机截取位置code += str.Substring(rd.Next(0, str.Length), 1);}return code;}}}

2.应用

在相应的.aspx文件的HTML中编写代码(我使用的是登录界面login.aspx)

(1)在<head>元素中,添加具有changeCode方法的脚本文件,其中还加了一个时间,是为了解决浏览器的缓存问题;

在<body>元素中,添加对waterMark.ashx的引用。

<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>后台登录-牛腩新闻发布系统</title><link href="../CSS/login.css" rel="stylesheet" type="text/css" /><script  lang="javescript" type="text/javascript">function changeCode() {var imgNode = document.getElementById("vimg");           imgNode.src = "../handler/WaterMark.ashx?t=" + (new Date()).valueOf(); //加时间是为了解决缓存问题}</script></head>
 <body>                                                                                                                                       <p>验证码:<img src="../handler/WaterMark.ashx"id="vimg" alt="" οnclick="changeCode()" /><asp:TextBox ID="txtCode" runat="server" CssClass="textcode"></asp:TextBox><asp:RequiredFieldValidator ID="RequiredFieldValidator3"runat="server" ErrorMessage="请输入验证码!" Text="*" ControlToValidate="txtCode"></asp:RequiredFieldValidator></p>                                                                                            </body>                                                                                                       

二、效果图

三、分析理解验证码

1.验证码的好处

一开始在使用这个验证码的时候感觉很麻烦,登录的时候总是输入验证码,但是今天自己不这么想了,我发现了一个理解验证码的说法:验证码虽然有时候很麻烦,但是可以有效保证我们的信息安全,验证码是一种区分用户是计算机还是人的全自动程序(自己有点不太理解这点),它可以防止恶意破解密码、刷票、论坛灌水,防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断地登录尝试。

2.降低验证码的使用次数

现在大多数网站采取了一种方法:第一次登录时不需要输入验证码,当输入信息错误时,为了安全则填写验证码。

小结

自己在做牛腩项目的时候,这块功能没有仔细地理解,通过一次总结确实重新理了一遍思路,很喜欢这种思考的感觉。

web网页中的验证码实现相关推荐

  1. python 如何使用 pandas 在 flask web 网页中分页显示 csv 文件数据

    目录 一.实战场景 二.知识点 python 基础语法 python 文件读写 python 分页 pandas 数据处理 flask web 框架 jinja 模版 三.菜鸟实战 初始化 Flask ...

  2. web网页中的特殊字体/字符

    web网页中的特殊字体/字符 1.特殊字体: Webdings字体,详见:http://blog.csdn.net/oscar999/article/details/10414411 测试: < ...

  3. HTML数字项目标签千位分隔符,请使用千位分隔符(逗号)表示web网页中的大数字

    一.移动端大数值会默认当作电话号码 在手机等移动设备上,对于超过一定个数的数值,系统默认会当做电话号码处理,而不是一个数字 按照中文用户的使用习惯,有时候个数很多的连续数字其实真的就是一个数字,自动变 ...

  4. shiro访问html没有验证码,Shiro在web应用中实现验证码、回显登录失败信息

    目录结构: 概述 扩展shiro认证 验证码工具 验证码servlet 配置文件修改 修改登录页面 测试验证 [一].概述 本文简单讲述在web应用整合shiro后,如何实现登录验证码认证的功能. [ ...

  5. Domino Web网页中更改密码比你想得简单得多

    大家好,才是真的好. 进入到Web时代,Domino作为一款优秀的的Web平台,居然有人说功能不全,比如很多人就经常问我,Domino怎么修改网页密码? 一般来说,我会回答,开发一个网页界面,输入旧密 ...

  6. 在web网页中加入天气

    1.现在有很多网站已经给我们提供了很多很好的API供我们使用,有些是收费的,有些是免费的,根据项目要求和经济实力,各取所需吧. 2.这里取用一个免费的API,在网页中加入下面一段代码,就可以在网页上加 ...

  7. C#获取网页中的验证码图片(转载)

    有时候我们需要获得网页上的图片,尤其是向验证码这样的图片.这个方法就是将网页上的图片获取到PictureBox中.效果入下图所示. 右边是使用Webbrowser控件装载的某网站的注册页面,其中包括了 ...

  8. Web网页实现登录验证码功能

    三部分内容 1.在登录页面生成验证码图片 2.点击图片更换新的验证码图片 3.点击登录,判定输入验证码与实际验证码是否一致 1.如何生成一个验证码图片,放置在登录页面? servlet: packag ...

  9. 在web网页中打开word文档

    1:首先添加下引用,右击网站→添加引用→弹出的框COM下添加 using Microsoft.Office.Interop.Word; using System; using System.Colle ...

最新文章

  1. mysql存储过程导出_Mysql导出存储过程
  2. VSCode自动生成Doxygen格式注释
  3. 图形推理1000题pdf_笔试|图形推理题满分攻略
  4. Mysql数据库中修改库名的的方法
  5. Error creating bean with name ‘org.springframework.security.oauth2.config.annotation.web.configurati
  6. ACM/OI中C++常用优化(实用/调试/技巧)代码(语法)
  7. 电商系统的自提订单,提货流程如何设计
  8. CCNP-第四篇-OSPF高级版(一)
  9. 返回数据_多层数据返回匹配值
  10. 95-872-050-源码-CEP-CEP之模式流与运算符
  11. 用python写聊天机器人_用Python 写一个机器人陪你聊天(文尾有彩蛋)
  12. 个人理解的块状格式化上下文
  13. NOIP2017提高组初赛选择题解析
  14. 怎么修改html游戏存档,星露谷物语存档修改方法 如何修改游戏存档
  15. 泰坦尼克号-决策树模型
  16. 搭建-ico图标制作
  17. c# 2进制 转16进制 ,16进制转2进制
  18. 复购率/回购率/新购人数
  19. 数据结构java朱战立pdf_数据结构使用C语言 朱战立,刘天时编著.pdf
  20. 思科c系列服务器cimc密码,UCS C系列服务器故障排除提示.PDF

热门文章

  1. 职中选什么专业好_职业高中有哪些专业 男生读职高选择什么专业好就业
  2. ReadLock和WriteLock(读写锁)
  3. java编写数字游戏大全_Java编写猜数字小游戏
  4. Gameplay - 设计《神秘海域》类型的关卡
  5. 物联网卡助力垃圾智能分类,现实城市垃圾自动化分类
  6. 软件测试报告(结对作业2之一)——李栋144,张孝祖 173
  7. oracle ip策略,ip rule -- 路由策略数据库管理命令
  8. BP神经网络能够做什么,bp神经网络构建步骤
  9. 8086汇编 DEBUG命令详解
  10. BuildCommDCB 参数错误