asp.net使用ashx生成图形验证码

ASP.NET C#实现验证码制作 在ASP.NET网页开发中,验证码是一种常见的用于验证用户输入的机制。在实际应用中,我们通常还需要添加验证码的验证逻辑,以验证用户输入是否与生成的验证码一致。这可以通过在用户提交表单时,将用户输入的验证码与生成的验证码进行比较来实现。当用户点击刷新按钮时,会生成一个新的验证码,并将其显示在页面上的图片控件中。首先,我们需要在ASP.NET网页中添加一个用于显示验证码的图片控件和一个用于刷新验证码的按钮。接下来,我们需要在后台代码中生成验证码的逻辑。中,我们将生成随机的验证码,并将其绘制到图片控件上。 阅读详情

验证码的好处不用我多说,你们都懂的。我在网上看到有人把验证码直接写在aspx页面里,也就是说这种方式请求验证码等于请求一个页面,这样做很不科学。如下所示

 <form id="form1" runat="server">
    <div>
    
        <asp:Image ID="Image1" runat="server" ImageUrl="Default.aspx" />
    
        <br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    
    </div>
    </form>

这个代码看着就觉得写代码的人比较欠揍,代码写成这样子着实郁闷。验证吗也不写点script做下切换。

下面我介绍一种方式来实现这样的功能

1.写个ashx生成图形验证码

using System;
using System.Collections;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.SessionState;
using System.Drawing;
namespace usechecknum.ashx
{
    /// <summary>
    /// $codebehindclassname$ 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class doCreateNum : IHttpHandler,IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string checkCode = GetValidation(5);  // 产生5位随机验证码字符
            context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
            System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
            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.Height);
                    int y2 = random.Next(image.Height);
                    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.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
                g.DrawString(checkCode, font, brush, 2, 2);

                //画图片的前景噪音点

                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());
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }


        }

        public string GetValidation(int num)
        {
            string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //"或者写汉字也行"
            string validatecode = "";
            Random rd = new Random();
            for (int i = 0; i < num; i++)
            {
                validatecode += str.Substring(rd.Next(0, str.Length), 1);
            }
            return validatecode;
           
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

2.在页面上显示验证码,因为我们生成的是图形,所以可以直接写在<img/>标签里,我们只要写段简单的脚本就可以点击鼠标切换验证码了

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="usechecknum._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>验证码的使用</title>
</head>
<script language="javascript" type="text/javascript">
    function changeCode() {   
        var imgNode = document.getElementById("vimg");   
        imgNode.src = "ashx/doCreateNum.ashx?t=" + (new Date()).valueOf();  // 这里加个时间的参数是为了防止浏览器缓存的问题   
    }
    </script>
<body>
    <form id="form1" runat="server">
     请输入验证码:<input type="text" name="checknum"/><img src="ashx/doCreateNum.ashx"  id="vimg" onclick="changeCode()" />
    </form>
</body>
</html>

说了半天,该是时候看看生成的验证码长什么样了



ASP.NET 6 集成 LazyCaptcha v2 图形验证码 在.NET 6 与.NET Core 中实现图形验证码,跨平台,支持配置参数化,美观,操作简单 阅读详情

相关推荐

asp.net生成图形验证码

采用asp.net生成图形验证码的文件,代码简单清晰。

ASP.NET-实现图形验证码

本文介绍了如何使用C#和ASP.NET创建一个简单而有效的图形验证码系统,包括生成随机验证码、绘制验证码图像以及将图像输出到客户端等步骤。ASP.NET实现图形验证码能够增强网站安全性,防止机器人攻击。通过生成随机验证码并将其绘制成图像,用户在输入验证码时增加了人机交互的难度。这种验证码系统对于保护网站免受恶意攻击和机器人恶意行为具有重要意义。

踏雨歌青春,诗酒趁年华 3104

深入浅出ISP:用RKISP2.x Tuner工具理解AWB、AE、HDR等核心模块的实战调参

本文深入解析RKISP2.x Tuner工具在ISP图像处理中的实战应用,重点探讨AWB、AE、HDR等核心模块的调参技巧。通过环境搭建、调试工具使用和实际案例,帮助开发者掌握如何在不同光照条件下优化图像质量,实现精准的白平衡、曝光控制和动态范围处理。

weixin_26802933的博客 487

ASP.NET 中图像验证码的实现

图像验证码在Web登录界面中很常见,以下是用C#写的一个简单例子。 1.首先创建一个 ValidateImage.aspx 页,注意引用System.Drawing和System.Drawing.Imaging两个命名空间。代码如下: publicclassValidateImage:System.Web.UI.Page{privatevoidP...

weixin_30650859的博客 398

c#.net使用正则表达式验证文本中是否包含手机号码或电话号码?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections; namespace RegularPhoneApp { class Program

码农 3584

C# 开发 ACS 运动控制系统:从入门到高阶应用实践

起始位置</param>/// <param name="endPos">结束位置</param>/// <param name="maxVelocity">最大速度</param>/// <param name="maxAcceleration">最大加速度</param>/// <param name="maxJerk">最大加加速度

品质生活,极致编程。 2842

.NET使用一般处理程序生成验证码!

  Html代码:                      function change() {            var imgNode = document.getElementById("vimg");            imgNode.src = "WaterMark.ashx?t=" + (new Date()).valueOf();  // 这里加个时间的参数是

227

MTK Linux DRM分析(八)- KMS drm_crtc.c

CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。

iTom1900 1349

【转载】Asp.Net生成图片验证码工具类

在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图类,字体类,一个LinearGradientBrush类等生成验证码图片。 本文生成图片验证码的采用Asp.Net中的一般处理程序文件ashx的文件,此文件一般继承于IHttpHandler的接口,是Asp.Net...

weixin_30701575的博客 169

数字孪生实战:如何用Unity3D为工厂设备快速搭建可视化孪生体(附GitHub源码)

本文详细介绍了如何利用Unity3D游戏引擎为工厂设备快速构建可视化数字孪生体。通过实战案例,阐述了从3D模型导入、MQTT实时数据接入,到振动、温度等关键参数可视化呈现的完整流程。文章旨在为智能制造和工业物联网开发者提供一套灵活、低成本的技术方案,并附有完整的GitHub源码,助力实现设备状态的直观监控与预测性维护。

weixin_29184075的博客 473

Harness Engineering:让Coding Agent真正落地生产

本文将带你系统性地了解如何让Coding Agent真正落地生产,核心是依托(全球领先的持续交付、云成本管理、 feature flagging、安全治理一体化平台),结合企业级AIDD(AI-Driven Development)的工程化实践,构建一套可信赖、可观测、可扩展、可治理的Coding Agent落地体系。核心概念与理论基础:什么是Coding Agent?它和普通的AI代码补全工具(比如GitHub Copilot)有什么区别?什么是Harness Engineering?

移动开发前沿的博客 455

【C#】一般处理程序ashx生成验证码、绘制验证码,传递数据

注意:要使用Session需要引用System.Web.SessionState命名空间,让ashx类继承IRequiresSessionState 接口 <%@ WebHandler Language="C#" Class="BackImage" %> using System; using System.Web; using System.Drawing; using S...

南朋友的博客 357

Spring AI Alibaba实战训练营-20 基于注解驱动的MCP快速开发入门指南

本文详细讲解如何使用SpringAiAlibaba快速开发基于注解驱动的MCP应用。文章详细介绍了MCP协议并且重点介绍了Spring AI通过注解驱动的开发方式简化MCP服务开发。具体包括服务端和客户端的注解使用、城市最新时间查询MCP项目结构概览(服务端和客户端模块)以及环境配置要求。

program哲学 295

.NET使用一般处理程序生成验证码

这是看牛腩老师讲的新闻发布系统中验证码的创建,这里记录下来以备后用。       原文链接:http://niunan.iteye.com/blog/252335 使用时应注意: 1、一般处理程序的创建(可以直接复制过去),后缀名一定是ashx。 一般处理程序WaterM

黄爱岗廊坊师范学院信息技术提高班 第七期 2289

c#【保姆级教程】基于System.Text.Json 支持多态类型序列化! 手把手教你实现一个通用的 PolymorphicJsonConverter!

我们需要自己实现一个继承自的转换器,在序列化时记录具体类型,在反序列化时根据类型标识还原成正确的子类对象。public abstract class WorkStepBase { /* 抽象方法等 */ }public class Person : WorkStepBase { /* 实现 */ }public class Product : WorkStepBase { /* 实现 */ }特性说明✅ 自动发现子类无需手动维护类型列表,自动扫描程序集✅ 类名映射。

一个编程的同学 425

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Login 图片验证码 生成一个图片验证控件

第一种是:可以产生图片的图片验证码 1、类库文件 <ccid_nobr> <ccid_code>using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.U...

weixin_30654419的博客 1727

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

学习整理了一下(一).功能 用HttpHandler实现图片验证码 (二).代码如下1. 处理程序文件 ValidateImageHandler.ashx代码如下1 <%@ WebHandler Language="C#" class="ValidateImageHandler" %>2 3 using System;4 using Sy...

anku0825的博客 132

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

asp.net图形验证码 静态图形验证码

恶意注册问题, 解决办法:验证码.... 验证码有很多种. 个人很多年前写过一种图形验证码. 其中第一种就是下边的代码 第二组 http://www.cnblogs.com/FayJack/articles/3063155.html 费话少说上代码 新建一个一般处理程序..即:.ashx文件 如下:CreateCode.ashx <%@ WebHandler La...

weixin_30675967的博客 159

asp.net一般处理程序(.ashx)动态生成验证码案例。

{使用一般处理程序动态生成验证码} 1.新建WebSite项目,添加一般处理程序命名为yzm.ashx,添加如下代码: public void ProcessRequest(HttpContext context) { //将context.Response.ContentType = "text/plain";修改为context.Response.Conte...

weixin_30376323的博客 207

ASP.NET 验证码插件 BotDetect CAPTCHA

以前开发ASP.NET项目的验证码功能,都是自己用GDI+去绘制。现在都是使用质量比较高的插件,除了省时省力,安全性也比自己瞎搞的高,我自己个人项目中比较常用的是BotDetect CAPTCHA这个插件,当然还有其他十分优秀的验证码插件,感兴趣的可以网上找找。   演示项目下载地址(使用VS2017开发): 百度网盘 GitHub BotDetect CAPTCHA依然属于传统字符验证码...

zhanglong_longlong的专栏 1758

WebApp验证码生成与使用

一、Login.html代码 window.onload = function () { var validateCode = document.getElementById("validateCode"); validateCode.onclick = function () {

松一160 833

有验证码的登陆界面(ajax,ashx技术制作)

前提:要引用AjaxPro.2.dll(右键--添加引用---选AjaxPro.2.dll文件即可) 备注:程序中的红色部分是经常会搞错的地方,请大家重点关注下。 1、首先制作ashx文件,功能(产生验证码图片,并把验证码保存在Session中,便于以后比对。 [ VDC.ashx ]文件 using System; using System.Web;

cilwfvip的专栏 574

WebForm 验证码

添加一般处理程序 <%@ WebHandler Language="C#" Class="yanzheng" %> using System; using System.Web; using System.Web.SessionState;//IRequiresSessionState的命名空间 using System.Drawing; public...

a5868530的博客 200

设置登录时的图形验证码

首先建一个一般处理程序,命名为RandomCode.ashx 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Collections; 6 using System.Configu...

dcli98004的博客 555
上一篇: 强类型的DataSet
下一篇: C#中StringReader和StringWriter的使用
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值