ASP.NET验证码控件(附详细用法)_第1页
ASP.NET验证码控件(附详细用法)_第2页
ASP.NET验证码控件(附详细用法)_第3页
ASP.NET验证码控件(附详细用法)_第4页
ASP.NET验证码控件(附详细用法)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、共享一款ASP.NET验证码控件(附详细用法)最近在完善我的毕业设计一ASP.NET(C#)实现的三层构架的二手交易系统,觉得有必要加上验证码,这样网站的安全性会提升一些。于是利用百度、谷歌反复搜索,终于找到了一款比较牛叉的验证码控件。原作者不详,这里附上一个地址。程序我做了一些小小的修改。按原文所说的操作,根本编译不了。原文的用法可以查看上面的链接地址,这里我贴出我自己的用法。我将两个类整合到一个.CS文件中了(这里命名为AuthCode.cs),程序如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentMod

2、el;usingSystem.Text;usingSystem.Web;usingSystem.Web.UI.WebControls;usingSystem.Web.UI;usingSystem.Web.SessionState;usingSystem.Drawing;usingSystem.IO;namespaceAuthCodeToolboxData()publicclassAuthCode:WebControl/summary/获得验证码的值/summary/returns验证码/returnspublicstringGetValue()returnHttpContext.Current

3、.Sessionvalue.ToString();05indab-e(irue=oaiegory(=Appearance=)一uescripiion(=s於蚩木岡=)一uefau_$wriQrTag.-ITIg)1mBs:(督圧靳戾HTMLiE)二proieciedoverridevoidAddmbuQSTORender(Him-Texiwmerwriier)base.AddmbuQSTORender(wriQr)s哄斓郵圧ssHTMr跡戾讪首壽耳琢莒陛議和戾Him_TexiwriQrn_uwriQr.Addsiy-embuQ(Him_Te$wriQrsiy-eoursoh=poinQ3suH

4、wmer.AddmbuQ(o=nc=c5=ihis.srcH_.mg.jd7idL+Maih.randoln()=)Mujsverify-mg.jdwriQr.AddmbuQ(Him_Te$wriQrmbuQ.srp=3g.jd=wriQrddmbuQ(=a_r=inra型费=publicclassAuthCodeHttpHander:IHttpHandler,IRequiresSessionState/返回验证码字符/vparamname=codeCount验证码长度/privatestringGetRandomNumberString(intcodeCount)stringstrChoic

5、e=2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z;stringstrResult=strChoice.Split(newChar,);stringstrReturn=;Randomrnd=newRandom();for(inti=0;ivcodeCount;i+)intj=rnd.Next(strResult.Length);/随机数不能大于数组的长度strReturn=strReturn+strResultj.ToString();returnstrReturn;privateColorGetColor()re

6、turnColor.Black;privateBitmapCreateImage(stringstr_AuthCode)intwidth=str_AuthCode.Length*13;intheight=20;Randomrad=newRandom();Bitmapbmp=newBitmap(width,height);Graphicsgrp=Graphics.FromImage(bmp);/在图片上绘制图形grp.Clear(Color.White);/填充bmp的背景色grp.DrawRectangle(newPen(Color.Red,1),0,0,width-1,height-1);/

7、绘制边框intnum=width*height;for(inti=0;inum;i+=3)在图片的指定坐标上画上有颜色的圆点intx=rad.Next(width);inty=rad.Next(height);intr=rad.Next(255);intg=rad.Next(255);intb=rad.Next(255);Colorc=Color.FromArgb(r,g,b);bmp.SetPixel(x,y,c);在图片的指定坐标上画上有颜色的圆点Fontf=newFont(宋体,12,FontStyle.Bold);/定义字体Brushbr=newSolidBrush(Color.Bla

8、ck);/定义画笔的颜色及字体的颜色for(inti=0;istr_AuthCode.Length;i+)strings=str_AuthCode.Substring(i,1);/单个单个的将字画到图片上Pointp=newPoint(i*12+rad.Next(3),rad.Next(3)+1);/字体出现的位置(坐标)grp.DrawString(s,f,br,p);绘制字符串grp.Dispose();returnbmp;/返回/是否可以处理远程的HTTP请求/publicboolIsReusablegetreturntrue;/将验证码图片发送给WEB浏览器/publicvoidPro

9、cessRequest(HttpContextcontext)intsize=AuthCode.mySize;/Int32.Parse(String)context.SessionSize);MemoryStreamms=newMemoryStream();/创建内存流(初始长度为0自动扩充)stringNumStr=GetRandomNumberString(size);/获得验证码字符context.Session.Add(value,NumStr);/将验证码字符保存到session里面BitmaptheBitmap=CreateImage(NumStr);/获得验证码图片theBitm

10、ap.Save(ms,System.Drawing.lmaging.lmageFormat.Jpeg);/将位图写入内存流context.Response.ClearContent();/清除缓冲区里的所有内容输出context.Response.ContentType=image/jpeg;/需要输出图象信息要修改HTTP头context.Response.BinaryWrite(ms.ToArray();/将内存流写入HTTP输出流theBitmap.Dispose();/释放资源ms.Close();释放资源ms.Dispose();释放资源context.Response.End();

11、我是这样使用这个验证码控件的1:修改web.config文件在vsystem.webv/system.web间加入下面的代码:2:“开始”-“运行”-“cmd”,用下面的两条命令编译AuthCode.cs文件为.DLL文件。(AuthCode.cs文件保存在“C:WINDOWSMicrosoft.NETFrameworkv2.0.50727”目录下):cdC:WINDOWSMicrosoft.NETFrameworkv2.0.50727csc/target:libraryAuthCode.cs将得到的DLL文件添加到项目的引用中,在“工具箱”中右键点“选择项”-在.net组件中勾选“AuthC

12、ode”(如下图),点确定之后工具箱中就会增加一个AuthCode控件。将这个控件从工具箱中拖到页面里使用。选中拖出的控件,在其属性中设置MySize即验证码的长度为某一正整数。例如设置成4,自动生成的代码如下(还有自动生成的注册这个控件的代码,这里未列出):到此,准备工作“基本”完成。(说“基本完成”是因为IIS里漏了一个必要的设置_人)在.NET2005中通过“文件”-“打开”-“网站”-“本地IIS”打开ASP.NET(C#)的网站项目,能正常运行页面,验证码控件生成的图片显示不了(只显示一个红叉)。改用“文件系统”的形式打开则可以正常显示。这个问题我思考了好几天,还到一些技术论坛请教过

13、别人,没人帮我解决(依靠别人是不行的)。这里只贴出那个最早的帖子的地址,在编程论坛、编程爱好者上的帖子就不贴出来了。我每天都试着去解决一下这个问题,终于慢慢找到了问题的症结。因为是在用IIS调试时出问题的,所以我猜测问题很有可能就出在IIS的某个设置上。今天偶然发现IIS里有修改HTTP头的设置,而且上面的程序注释中提到了要修改HTTP头,语句如下:context.Response.ContentType=image/jpeg;/需要输出图象信息要修改HTTP头同时,web.config文件中也有对HTTP头”的设置,设置如下:于是,我到MSDN里找到了一些与vhttphandlers相关的资

14、料,资料如下:设置由应用程序子目录继承。指令按由上而下的顺序进行处理。如果两个或多个元素指定相同的谓词/路径组合,则最后一个会重写其他所有元素。MicrosoftInternet信息服务(IIS)有自己的ISAPI映射扩展模型。为使给定应用程序扩展与其处理程序之间的映射生效,该扩展必须在IIS中映射为ASP.NETISAPI。对于自定义扩展等非标准扩展,则必须相应地配置IIS。受上面资料的启发,我又仔细翻查了IIS的设置,发现有个“映射”的设置。加上考虑到这个控件实际生成的是一个.jd的文件(没见过的扩展名),所以我怀疑用IIS调试显示不了这个验证码图片的症结就在这里。我以“vhttpHand

15、lersIIS”为关键字百度了一下,经验证,终于找到了准确有效的设置办法:通过“程序”一“管理工具”一“Internet信息服务”一选中“默认网站”一右键点“属性”“主目录”“配置”“映射”“添加”来设置:路径为:C:WINDOWSMicrosoft.NETFrameworkv扩展名为:.jd限制为:GET,HEAD,POST,DEBUG去掉“检查文件是否存在”前的勾。(必须去掉这里的“丁”)如下图:补充:一般来说,我们只要在IIS控制台中打开目标网站的属性设置窗口,单击其中的“主目录”标签,在该标签设置页面的“应用程序设置”处单击“配置”按钮,在其后界面中单击“添加”按钮,之后就能根据界面提示完成应用程序扩展名映射添加操作了。然而,有的朋友在打开应用程序扩展名添加对话框后,发现其中的“确定”按钮处于灰色不可用状态;并且,朋友通过“浏览”按钮导入了应用程序详细路径,以及设置了对应程序的扩展名后,发现应用程序扩展名添加对话框中的“确定”按钮依然处于灰色不可选状态。要想解决这种故障现象,我们

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论