一》 原理:

  把用代码生成的图片存放到硬盘当中,然后在返回存储路径把图片通过图片标签的 src 属性 自动加载到浏览器中

二》 步骤

    1. 首先用GDI+ 绘图 把验证码图片给绘制出来

    2. 然后提前判断硬盘里是否有已生成的图片,如果有,则删除,以避免节省硬盘空间

    3. 把生成的验证码存放到 Session 会话当中,以供前台验证 填写验证码的准确性, 在构建文件路径,把验证码图片存入路径中

    4. 想前台返回路径

三》 代码实例如下

Identifying.html 代码

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>验证码实验</title>
<script src="jquery-1.4.1.js"></script>
</head>
<body>
验证码:
<div>
<img src="" id="tp"/><a href="javascript:void(0)" id="huan">看不清换一张</a>
</div>
<script type="text/javascript">
$(function () {
function xx() {
$.ajax({
url: 'Identif.ashx',
type: 'POST',
datatype: 'text',
success: function (data) {
$("#tp").attr("src", data.toString());
}
});
};
xx();
$("#huan").click(xx);
});
</script>
</body>
</html>

Identif.ashx 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Drawing;
using System.Web.SessionState; namespace FourmWeb.Identifying
{
/// <summary>
/// Identif 的摘要说明
/// </summary>
public class Identif : IHttpHandler,IRequiresSessionState
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";//响应报文主体的类型 string path = context.Request.MapPath("~/"); ;
Bitmap map = new Bitmap(, ); //创建位图文件
Graphics g = Graphics.FromImage(map); //画布 //填充背景颜色
g.FillRectangle(Brushes.White, , , , ); //随机产生验证码
string code = null;
Random re = new Random(Guid.NewGuid().GetHashCode()); //用哈希数做随机种子
for(int i = ; i < ; i++)
{
if (re.Next(, ) % == )
{
code += re.Next(, ).ToString();
}
else
{
code+= (Char)re.Next(, );
}
} //删除已存在的文件
if (context.Session["code"] != null)
File.Delete(path + context.Session["code"].ToString() + ".jpg"); //构建文件路径
path += code + ".jpg"; context.Session["code"] = code; //将验证码画到画布上
g.DrawString(code, new Font("宋体", ), Brushes.Gray, new PointF(, ));
//绘制干扰点
Random random = new Random();
for (int i = ; i<; i++)
{
map.SetPixel(random.Next(, ), random.Next(, ), Color.LightGray);
} //输出图像
map.Save(path); //发送相对路径
context.Response.Write("../"+code+".jpg"); context.Response.End(); } public bool IsReusable
{
get
{
return false;
}
}
}
}

      

Ajax动态刷新验证码图片的更多相关文章

  1. Django(九)下:Ajax操作、图片验证码、KindEditor使用

    三.Ajax操作 ajax操作基于浏览器的xmlHttpRequest对象,IE低版本是另外一个对象,jQuery 1 版本对那两个对象做了封装,兼容性最好,2 .3版本不再支持IE低版本了. Aja ...

  2. Servlet实现验证码图片(一)

    Servlet实现数字字母验证码图片(一): 生成验证码图片主要用到了一个BufferedImage类,如下:

  3. SpringMVC生成的验证码图片不显示

    近期用SSM框架写一个项目,登录模块需要生成验证码图片,我把相关的代码写好了之后传到 jsp ,但是图片不显示,查看控制台显示404,反复查询了一下代码并没有发现任何问题,代码如下: @Control ...

  4. Struts2 验证码图片实例

    本文转载于DongLiYang的博客http://www.cnblogs.com/dongliyang/archive/2012/08/24/2654431.html 其中修改过一部分,针对使用注解而 ...

  5. java web学习总结(九) -------------------通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  6. android 生成验证码图片

    (转自:http://blog.csdn.net/onlyonecoder/article/details/8231373) package com.nobeg.util; import java.u ...

  7. delphi WebBrowser控件上网页验证码图片识别教程(一)

    步骤一:获取网页中验证码图片的url地址 在delphi中加入一个BitBtn和一个memo以及WebBrowser控件实现网页中验证码图片的url地址的获取 程序如下:procedure TForm ...

  8. 学习笔记:利用GDI+生成简单的验证码图片

    学习笔记:利用GDI+生成简单的验证码图片 /// <summary> /// 单击图片时切换图片 /// </summary> /// <param name=&quo ...

  9. JavaWeb---总结(九)通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片  1 package gacl. ...

随机推荐

  1. 【学习笔记】【Foundation】数组

    数组:可重复,有序 不可变数组 创建数组 //array开头的方法是类方法,init开头的是实例方法 //NSArray* arr=[[NSArray alloc]initWithObjects:@& ...

  2. 转:exit()与_exit()的区别

    版权声明:本文为博主原创文章,未经博主允许不得转载. 从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构:exit 函数则在这些基础上做了 ...

  3. CreateLiveCMSV4.0 漏洞,无需后台Get shell

    Title:CreateLiveCMSV4.0 漏洞,无需后台Get shell --2012-03-06 17:28 标题:CreateLive CMS Version 4.0.1006 漏洞,无需 ...

  4. DOCKER脚本一例---快速建立大批测试机

    这个会由一系列的脚本构成,比如: 系统重启后,如何快速恢复服务,如何建立网桥(也可一次写入),如何在新系统上快速部署. ADDBRIDGE #!/bin/sh br_name=br100 brctl ...

  5. LeetCode _ Word Break

    Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...

  6. PCB走线和过孔的过流能力

    PCB走线的载流能力与以下因素有关:线宽.线厚(铜箔厚度).容许温升.PCB走线越宽,载流能力越大. 近似计算公式: I=KT0.44A0.75 (K为修正系数,一般覆铜线在内层时取0.024,在外层 ...

  7. #pragma execution_character_set的意义

    就是设置执行字符集,指示char的执行字符集是UTF-8编码.如果源文件中出现中文,必须要设置为 #if _MSC_VER >= 1600        #pragma execution_ch ...

  8. op编译信赖的库

    Table of known prerequisites and their corresponding packages Here's a table with the package name f ...

  9. Android视图框架

    Android视图框架 Android的UI系统是android应用系统框架最核心,最基础的内容! 1. Android视图系统.层次关系 Android应用设计和Web应用设计类似,也分前端和后端设 ...

  10. Android ListView特别属性用法

    由于这两天在做listView的东西,所以整理出来一些比较特别(不常用)的属性,通过设置这样的属性可以做出更加美观的列表 1.stackFromBottom属性,这只该属性之后你做好的列表就会显示你列 ...