02-17 位图验证码(一般处理程序)

建立一个空网站,在设计界面工具箱中拖入一个TextBox工具,一个按钮,外加一个Image图片工具(充当数字、字母以图片形式)。但是这样做出来的验证码会出现一个问题,每当点击一下按钮,界面自动提交一遍,重新刷新一遍再返回,为防止整个页面被重新提交,需要加入一个UpdatePanel,只刷新当前updatePanel内的内容即可。

界面设计好后,需要添加一个以ashx结尾的文件项,在这里面写位图随机验证码的格式等等。

 1 <%@ WebHandler Language="C#" Class="Code" %>
 2
 3 using System;
 4 using System.Web;
 5 using System.Drawing;
 6 using System.Drawing.Drawing2D;
 7 using System.Drawing.Imaging;
 8 using System.Web.SessionState;
 9 //一般处理程序要使用session,必须要继承IRequiresSessionState接口(接口就是一个空的方法),session存在于这个接口中
10 public class Code : IHttpHandler,IRequiresSessionState {
11
12     public void ProcessRequest (HttpContext context) {
13         context.Response.ContentType = "image/jpeg";
14         Bitmap img = new Bitmap(50, 20);//位图,画了一个空白的图形
15         Graphics g = Graphics.FromImage(img);//
16
17         string s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
18         string str = "";
19         Random rand = new Random();//初始化随机数
20         for (int i = 0; i < 4; i++)
21         {
22             int start = rand.Next(62); //生成一个随机的起始位置
23             str += s.Substring(start, 1).ToString();
24         }
25         context.Session["code"] = str;//session用于传值
26
27         Font font = new Font("宋体",12, FontStyle.Bold);//设置字体格式
28         SolidBrush brush = new SolidBrush(Color.White);
29         g.FillRectangle(brush, 0, 0, 50, 20);
30         brush.Color = Color.Red;
31         g.DrawString(str, font, brush, 0, 0);
32         img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
33     }
34
35     public bool IsReusable {
36         get {
37             return false;
38         }
39     }
40
41 }
一般处理程序:有一个页面A,传递参数到一般处理程序,处理程序接收到参数,访问数据库,判断正确,跳转下一个页面,错误,跳转到另一个页面.

在aspx的Js源代码中,写function语句,确保传递参数

 1 <body>
 2     <form id="form1" runat="server">
 3     <div>
 4
 5
 6         <asp:ScriptManager ID="ScriptManager1" runat="server">
 7         </asp:ScriptManager>
 8
 9     </div>
10         <p>
11             &nbsp;</p>
12
13                 <asp:Image ID="Image1" runat="server" ImageUrl="~/Code.ashx" />
14
15                 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
16                 <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
17                 <asp:Label ID="Label1" runat="server" Text="失败"></asp:Label>
18     </form>
19 </body>
20 </html>
21 <script>
22 //js方法
23     function changeimg()
24     {
25         var img = document.getElementById("Image1");
26         img.src = "Code.ashx?1=" + Math.random();//使用母版页之后,自己写的ID和JS生成的ID会不一样,需要手动更改ID(方法1)
27     }
28 </script>
29 //方法2:嵌生成之后的ID
30 <script>
31     function changeimg()
32     {
33         var img = document.getElementById("<%=Image1.ClientID%>"); //使用经<% %>转译之后ID
34         img.src = "Code.ashx?1=" + Math.random();
35     }
36 </script>

界面效果:

时间: 2024-10-12 05:06:52

02-17 位图验证码(一般处理程序)的相关文章

02.实现图形验证码

实现图形验证码 使用过滤器实现图形验证码 使用kaptcha验证码 <!--验证码组件--> <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency> /** * 自定义身份验证失败处理程序 */ public c

PAT 甲级 A1083 (2019/02/17)

#include<cstdio> #include<cstring> #include<algorithm> // STL using namespace std; //使用sort()函数必须加上 const int MAXN = 50; struct Student{ char name[15]; char id[15]; int score; }stu[MAXN]; bool cmp(Student a, Student b){ return a.score &g

PAT 甲级 A1025 (2019/02/17)

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 30010; struct Student{ char id[15]; int score; int local_number; int local_rank; }stu[maxn]; bool cmp(Student a, Student b){ if(a.score != b.sco

PAT 甲级 A1028 (2019/02/17)

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN = 100010; struct Student{ int id; char name[10]; int score; }stu[MAXN]; bool cmp1(Student a, Student b) { return a.id < b.id; //从小到大 } bool cmp

PAT 甲级 A1055 (2019/02/17)

#include<cstdio> #include<cstring> #include<algorithm> // STL using namespace std; //使用sort()函数必须加上 const int MAXN = 100010; struct TH{ char name[15]; int age; int money; }th[MAXN], valid[MAXN]; int Age[MAXN] = {0}; //某年龄人数,下标代表人数 bool c

C#使用tesseract3.02识别验证码模拟登录

一.前言 使用tesseract3.02识别有验证码的网站 安装tesseract3.02 在VS nuget 搜索Tesseract即可. 二.项目结构图 三.项目主要代码 1 using System; 2 using System.Collections.Concurrent; 3 using System.Collections.Generic; 4 using System.Diagnostics; 5 using System.Drawing; 6 using System.IO;

验证码和图片上传和多张图片无刷新上传

先来验证码一般处理程序编写 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 6 namespace Blog.UI 7 { 8 using System.Drawing; 9 using Blog.Common; 10 /// <summary> 11 /// Vcode 的摘要说明 12 /// </summary> 13 public c

自己封装的一个java图片验证码

验证码生成器: 1 package com.lz.Tools; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.image.BufferedImage; 8 import java.util.Random; 9 10 /** 11 * 验证码生成器 12 * 13 * @author boji

【牛腩新闻公布系统】----你的验证码正确么

前言 这是一个奇妙的站点--牛腩新闻公布系统,尽管做的不咋地,但毕竟是自己动手敲出来,还是有一点点的满足感.同一时候这也是小编的第一个雠小鸭,长相不算美丽,发育还是挺健全的. 终有一天我的丑小鸭会变成白天鹅. 一步一步的进化,一步一步的蜕变-- 你的验证码正确么 哎呀--为什么我的牛腩新闻公布系统   请输入验证码的图片一直为这个样子呀--不显示,就是不显示图片,图片载入出错呀. 想想预计是图片路径不对. 尝试一:牛老师说的图片载入路径 <img src="handler/WaterMar