手机版

ASP .NET ashx实现无刷新页面生成验证码

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码。

效果图:

实现方式:

前台:

div span标识代码:/span ASP : textbox ID=' txt validation code ' runat=' server ' Width=' 130 px ' MaxLength=' 4 '/ASP : textbox img ID=' imgYZ ' class=' code ' style=' height 336023 px;宽度' :65 px'src=' Http : IMg。ashx ' onclick='这个。src=这个。src?//img src='http:/images/BTN _ Change。gif ' title=' Change ' class=' BTN _ Change ' Style='光标: hand ' onclick=' imgcchange()'//div js:

脚本语言=' JAVAScript ' type=' text/JAVAScript ' function img change(){ var img=document。getelementbyid(' imgYZ ');img。单击();} /scriptashx:

使用系统;使用系统网络.使用索赔.BLL;使用系统。数据;使用系统。配置;使用系统网络。元素的使用系统。绘图;公共类Img : IHttpHandler,irequirsessonstate { public void process request(HttpContext context){ context } .回应。content type=' image/Jpeg ';字符串s _ random=系统。内存流=新系统IO。内存流();s _ random=rnd num(4);语境会话[' random ']=s _ random;随机=随机。子串(0,1) ' ' s_random .子串(1,1) ' ' s_random .子串(2,1) ' ' s_random .子串(3,1);CreateImage(s_random,ref ms);语境回应。ClearContent();语境回应。binary write(ms . to array());语境。响应。刷新();语境。响应。end();}私有void CreateImage(字符串checkCode,参考系统IO。内存流ms){ int iwidth=(int)(CheckCode .长度* 18);系统。绘图。位图图像=新系统。绘图。位图(iwidth,45岁);图形g=图形FromImage(图像);透明(颜色。白色);//定义颜色颜色[] c={颜色.黑色,彩色。红色,彩色。深蓝色,彩色。绿色,彩色。橙色,彩色。棕色,彩色。深青色,彩色。紫色};//定义字体//string[] font={'Verdana ',' Microsoft Sans Serif ',' Comic Sans MS ',' Arial ','宋体'};rand rand=new Random();//随机输出噪点for(int I=0;i 50i ) { int x=rand .下一张(图片。宽度);int y=兰特。下一张(图片。身高);画矩形(新钢笔(颜色. LightGray,0),x,y,1,1);} //输出不同字体和颜色的验证码字符for(int I=0;我检查代码。长度;i ) { int cindex=rand .接下来(7);int findex=rand .下一步(5);字体=新系统。绘图。字体(' Arial ',24,(系统。绘图。字体样式。粗体|系统绘图。字体样式。斜体));画笔b=新系统绘图。solid brush(c[cindex]);int ii=4;if((I ^ 1)% 2==0){ ii=2;} g。拉绳(检查代码.子串(一,1),字体,b,3 (i * 12),ii);} //画一个边框画矩形(新钢笔(颜色。黑色,0),0,0,图像。宽度- 1,图像。身高-1);//输出到浏览器图像。保存(毫秒,系统绘图。成像。imageformat。JPEG);g。处置();图像dispose();}公共静态String RndNum(int VcodeNum){ String Vchar=' 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z ';String[] VcArray=Vchar .拆分(',');字符串VNum=随机随机=新随机();for(int I=1;I=VcodeNumI){ int Inum=0;while ((iNum=Convert .至t32(VcArray .长度*随机. NextDouble()))==VcArray .长度){ iNum=转换.至t32(VcArray .长度*随机. NextDouble());} Vnum=VcArray[Inum];}返回VNum}公共bool IsReuse { get { return false} }}备注:

onclick='this.src=this.src '?''

之前一直不明白为什么要加一个?号,于是去网上搜索,参考一下前辈们的见解:

[这是代表当前图片的链接。在当前链接值的基础上添加一个问号,例如当前src='http:check.aspx '。点击后变成‘check . aspx .’如果继续,它将变成“check.aspx?'这个问号没有实际意义,它唯一的作用就是向IE显示:图片链接发生了变化,图片需要刷新。]

[GET:当客户端想要从服务器读取文档时,使用GET方法。GET方法要求服务器将位于URL的资源放入响应消息的数据部分,并将其发送回客户端。使用GET方法时,请求参数和相应的值会附加到带有问号(“?”)的URL)表示URL的结束和请求参数的开始,传递的参数长度有限。例如/index.jsp?id=100op=bind .开机自检:当客户端向服务器提供更多信息时,可以使用开机自检方法。POST方法将请求参数以名称/值的形式封装在HTTP请求数据中,可以传输大量数据。' this.src=this.src '?加上这个的原值。src?以便向服务器发送新的GET方法,从而获得新的验证码]

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:ASP .NET ashx实现无刷新页面生成验证码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。