一般处理程序:
一般处理程序大致为:接受前台和反馈数据
思路:
- 在一般处理程序中画出空白图片
- 产生验证码
- 将验证码画到空白图片中
- 产生干扰线
- session储存验证码,并将图片反馈前台
- 将前台的文本框值传在在另一个一般处理程序中验证
- 在另一个一般处理程序反馈结果
实践:
在一般处理程序中创建空白画笔
//将一般处理程序的返回类型改为image/png
context.Response.ContentType = "image/png";
//创建空白图片
Bitmap bitmap = new Bitmap(100,30);
//创建画笔类
Graphics graphics = Graphics.FromImage(bitmap);
Font font = new Font("宋体", 18);
//定义画笔颜色
SolidBrush solidBrush = new SolidBrush(Color.Red);
产生验证码
//使用集合来装字母
List<string> li = new List<string>();
for (int a=97,b=65;a<122;a++,b++) {
//使用acsll码转为字母
li.Add((char)a + "");
li.Add((char)b + "");
}
//循环产生4个随机数作为集合下标得到随机的字母
Random random = new Random();
string zfc = "";
for (int v=0;v<4;v++) {
zfc += li[random.Next(0, li.Count)];
}
将验证码画到空白图片中
graphics.DrawString(zfc, font, solidBrush, 15, 5);
产生干扰线
//干扰线笔类
Pen pen = new Pen(new SolidBrush(Color.White));
//产生6条干扰线
for (int i = 0; i < 6; i++)
{
//随机数产生随机的下标(不能超过图片的大小)
graphics.DrawLine(pen,random.Next(0,100), random.Next(0,30),random.Next(0, 100),random.Next(0, 30));
}
session储存验证码,并将图片反馈前台
//一般处理程序中使用session要引用System.Web.SessionState类并继承接口IRequiresSessionState
//储存session
context.Session["session名称"] = zfc;
//反馈给前台
bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);
前台jquery传值到“验证一般处理程序”中
<script src="js/jquery-3.5.1.js"></script>
<script src="js/jquerysession.js"></script>
<script>
$(function () {
$("#按钮id").click(function () {
//使用ajax传值和接受结果
$.ajax({
url: "验证一般处理程序名称.ashx",
type: "get",
data: { 传值名称:传值内容},
success: function (result) {
//将结果弹出
alert(result)
}
})
});
</script>
验证一般处理程序接受值和反馈结果
//设置反馈类型为"text/plain"
context.Response.ContentType = "text/plain";
//接受前台文本框的值
string con= context.Request["传值名称"];
//接受session值
string sessionval = context.Session["session名称"].ToString();
//进行判断
if (!con.Equals(sessionval)) {
context.Response.Write("验证码不正确");
}
else {
context.Response.Write("验证码正确");
}
成功运行即可