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

基于角谱传播的MATLAB仿真:从相位恢复看自由空间光传播

本文详细介绍了基于角谱传播理论的MATLAB仿真方法,用于模拟自由空间光传播过程。通过傅里叶光学原理,将光场分解为频谱并应用传播相位滤波器,实现了从纯相位物体到可观测衍射图样的仿真。文章结合具体代码,演示了如何利用角谱法进行相位恢复,为计算成像和生物医学检测等领域的研究提供了实用的仿真工具和思路。

weixin_29055699的博客 281

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

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

weixin_30650859的博客 398

大疆sdkV4以及V5webrtc推流

webrtcSDK中要用它的VideoCapturer来初始化推流 ViewdoCapturer是一个接口我们继承它 然后重建创建文件CapturerAircraft.java文件。CameraUtil.java这个是我们用来创建CapturerAircraft的一个工具。除了CapturerAircraft这个文件不一样外其他都是一样的。PlayBodyBean.java这个是我们的配置文件。下面的有个代码块第一个是v4的 第二个是v5的。接着我们来创建几个推流用到的webrtc工具。

weixin_41624865的博客 1188

STM32L476低功耗实战:LPTIM精准定时唤醒STOP2模式与系统级功耗优化

本文深入探讨了STM32L476低功耗实战技巧,重点解析了LPTIM精准定时唤醒STOP2模式的配置与优化。通过详细的步骤指南和实战经验分享,帮助开发者实现系统级功耗优化,特别适合电池供电设备开发。文章涵盖LPTIM1定时器配置、STOP2模式进入流程及常见问题排查,助力将整机功耗降至8.2uA级别。

weixin_33686714的博客 435

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

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

227

合泰单片机HT32之keil5开发环境搭建(一)

1. 前言 这两天在准备合泰杯,但是总是感觉无从下手,因为合泰单片机的资料教程什么的非常少,不像stm32那样。而且听说要用合泰单片机的专用IDE,感觉当场被劝退了。后来经过查找资料,发现合泰单片机也有keil5的支持包,也就是说可以从库函数进行开发,不用从寄存器进行开发,但我找了好久,并没有找到教程,后来实在没办法,打算自己动手搭建环境,经过了大概两天的挣扎后,终于成功地搭建好了环境,也成功地点...

weixin_44713763的博客 8669

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

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

weixin_30701575的博客 169

【DRAM存储器五十六】LPDDR5介绍--WCK2CK Leveling和Read gate training

简述LPDDR5 WCK2CK leveling和read gate traning基本原理与操作步骤

highman110的博客 8789

地统计插值学习心得(一)

(创建地统计图层工具用于根据现有的地统计图层或者地统计模型来创建包含新要素数据集的地统计图层,也就是使用构建好的地统计模型用到新的数据集中)这表明,远离极值的区域预测不受极值的影响,并且还表明,包括极值会导致钼元素浓度高的区域周围的预测明显变高。通常,我们使用同一个数据集进行建模和预测,但是在实际插值过程中,这两步的数据可以是不同的,这就是处理极值的诀窍。如果你的数据集有无法忽略的极值时(比如这些钼元素浓度),一种常见的方法是首先显式移除极值进行建模,然后在预测中使用整个数据集(包括极值)。

JData_Engineer的博客 286

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

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

南朋友的博客 357

基于高光谱的物质反演与分类 — 技术文章(原理详解 + 深度代码实现)

高光谱遥感 / 近场光谱采集产生逐像素上百波段的光谱曲线,是物质识别与定量反演(abundance / composition estimation)和语义分类(landcover / material class)的一把利器。本文第一部分对常用模型(线性混合模型、非线性辐射传输、稀疏反演、降维与特征选择、分类器/神经网络)进行数学推导与理论分析;第二部分给出两套完整实现:A. 基于 LMM 的约束最小二乘 / 稀疏反演流水线(含端到端评估);

VectorShift的博客 220

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

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

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

智能Agent如何重塑企业流程

在当今数字化时代,企业流程的效率和敏捷性至关重要。传统企业流程往往受限于人工操作,效率低下、成本高昂,难以适应快速变化的市场环境。智能Agent作为一种新兴技术,凭借其强大的智能化能力,正在逐渐改变企业流程的运作模式,为企业带来新的机遇和挑战。智能Agent是一种能够感知环境、自主决策、执行任务的软件实体。它可以模拟人类的智能行为,例如学习、推理、规划和沟通。通过将智能Agent嵌入到企业流程中,可以实现流程的自动化、优化和智能化,从而提高效率、降低成本、提升客户体验。8.1 研究成果总结。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 873

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

anku0825的博客 132

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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、付费专栏及课程。

余额充值