大型网站中的验证码解决方案
先看这个demo的解决方案图
Entity是实体,里面有验证码的实体
private string contentType = "image/pjpeg";private ImageFormat imageFormat = ImageFormat.Jpeg;public Bitmap Image{get;set;}public string ContentType{get { return contentType; }set { contentType = value; }}public ImageFormat ImageFormat{get { return imageFormat; }set { imageFormat = value; }}
Plugin是插件
这个验证码是插件机制实现的
接口文件为
public interface IVerifyImage{VerifyImageInfo GenerateImage(string code, int width, int height, Color bgcolor, int textcolor);}
provider类是一个抽象工厂
代码为
private static Hashtable _instance = new Hashtable();private static object lockHelper = new object();//通过接口和反射结合配置文件信息来做整站多验证码技术public static IVerifyImage GetInstance(string assemlyName){if (!_instance.Contains(assemlyName)){lock (lockHelper){if (!_instance.ContainsKey(assemlyName)){IVerifyImage p = null;try{p = (IVerifyImage)Activator.CreateInstance(Type.GetType(string.Format("Plugin.VerifyImage.{0}.VerifyImage,Plugin.VerifyImage.{0}", assemlyName), false, true));}catch{p = new Plugin.VerifyImage.JpegImage.VerifyImage();}_instance.Add(assemlyName, p);}}}return (IVerifyImage)_instance[assemlyName];}
验证码相关对象是通过发射机制创建的
具体路径信息写在配置文件中
这样可以设置多个验证码类
具体验证码相关代码请下载这个demo自己去研究
做一个页面,重写他的onInit事件,把验证码输出出来
protected override void OnInit(EventArgs e){base.OnInit(e);string verifyAssembly = "JpegImage";//此处信息可从配置文件获得string bgColor = "";//Request.QueryString["bgcolor"].Trim();int fontColor = 1; //StrToInt(Request.QueryString["fontcolor"].Trim(), 1);string[] bgcolorArray = bgColor.Split(',');Color bg = Color.White;if (bgcolorArray.Length == 1 && bgColor != string.Empty){bg = ToColor(bgColor);}else if (bgcolorArray.Length == 3 && IsNumericArray(bgcolorArray)){bg = Color.FromArgb(StrToInt(bgcolorArray[0], 255), StrToInt(bgcolorArray[1], 255), StrToInt(bgcolorArray[2], 255));}VerifyImageInfo verifyimg = Plugin.VerifyImage.VerifyImageProvider.GetInstance(verifyAssembly).GenerateImage(CreateAuthStr(5, false), 120, 60, bg, fontColor);Bitmap image = verifyimg.Image;System.Web.HttpContext.Current.Response.ContentType = verifyimg.ContentType;//MemoryStream ms = new MemoryStream();image.Save(this.Response.OutputStream, verifyimg.ImageFormat);}
这里涉及到很多工具方法,请下载demo自己研究
调用验证码可以在页面写JS代码
<script type="text/javascript">document.getElementById('vcodeimg').src='/tools/VerifyImagePage.aspx?id=4&time=' + Math.random(); </script>
源代码下载
vertify.rar
转载于:https://www.cnblogs.com/liulun/archive/2009/06/08/1499048.html
大型网站中的验证码解决方案相关推荐
- 登陆网站中的验证码是起什么作用的
登陆网站中的验证码是起什么作用的 登陆网站中的验证码是起什么作用的 例如:1\登陆"SOSO问问"时先填用户名,然后填密码,下边有四个英文或数字随机组成的,需要用户填入 2\登陆网 ...
- 如何在网站中添加验证码验证
要在网站中添加验证码验证,可以按照以下步骤进行操作: 在HTML表单中添加验证码输入框.在表单中添加一个输入框,用于让用户输入验证码. 生成随机验证码并保存到会话中.在服务器端生成一个随机的验证码,并 ...
- Memcached在大型网站中应用
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.最初为了加速 LiveJ ...
- Session的原理,大型网站中Session方面应注意什么?
一.Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法(通常用于pc端网站保持登录状态,手机端通常会使用token方式实现),存储在服务端. Cookie是在客户端保 ...
- Memcached在大型网站中应用[php 转载]
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.最初为了加速 LiveJ ...
- 大型网站技术架构核心原理剖析,文末附知识图谱下载
什么是软件架构 维基百科定义:软件架构是指有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计. 软件架构5大要素: 性能 可用性 伸缩性 扩展性 安全性 可以通过考察这5大要素来衡量 ...
- 【面试精选】关于大型网站系统架构你不得不懂的10个问题
该文已加入笔主的开源项目--JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目),地址:github.com/Snailclimb/- .觉得不错的话,记得点个Star. ...
- 《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构
来源:http://www.cnblogs.com/edisonchou/p/3862389.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- 亿级流量网站架构核心技术_关于大型网站系统架构你不得不懂的10个问题
来自:JavaGuide(微信号:JavaGuide) 下面这些问题都是一线大厂的真实面试问题,不论是对你面试还是说拓宽知识面应该都很有帮助.之前发过一篇8 张图读懂大型网站技术架构 可以作为不太了解 ...
最新文章
- 【webrtc】webrtc的rtp重传代码分析
- iText in Action 2nd5.4节(Adding page events to PdfWriter)读书笔记
- a标签居中 img vue,让html img图片垂直居中的三种方法
- elasticsearch中集群选举中的ping源码解析
- 管理大型共享数据库,做到这几点不再头疼!
- 抓取Crash不让崩溃
- 剑指offer python版 构建乘积数组
- FastJSON 简介及其Map/JSON/String 互转
- 230.二叉搜索树中第K小的元素
- 三菱5uplc伺服电机指令_?2020/9/12三菱PLC触摸屏控制POWSD-伺服电机
- Django @csrf_exempt不能在类视图中工作(Django @csrf_exempt not working in class View)
- 仿小米商城SpringBoot+Vue全栈项目开发实战文档
- Jmeter01 -mac下的安装
- VirtualBox 调整屏幕分辨率
- android2.1操作系统,电脑安卓操作系统
- Unity3D教程:简单触发器实现自动开关门
- 转 -- windows7 C盘空间越来越少?完美解决方案
- 什么是Timestamp——时间戳?
- 自然语言处理从零到入门 自然语言生成NLG
- 海信电视升级鸿蒙系统,海信电视陆续启动聚好看升级计划