大型网站中的验证码解决方案

简介: 先看这个demo的解决方案图 Entity是实体,里面有验证码的实体 private string contentType = "image/pjpeg"; private ImageFormat imageFormat = ImageFormat.

先看这个demo的解决方案图
image
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

目录
相关文章
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
2833 5
|
文字识别 JavaScript 安全
怼就完事了,总结几种验证码的解决方案
怼就完事了,总结几种验证码的解决方案
1047 0
|
数据安全/隐私保护
一个页面多个图形验证码冲突的解决方案
实际开发中,经常会遇到一个页面需要两个或多个验证码,使用同一个验证码调用两次会导致前一个失效。那么我们需要使用两个不同的验证码.
一个页面多个图形验证码冲突的解决方案
|
PHP
PHP实现图片登录验证码的解决方案
PHP实现图片登录验证码的解决方案
272 0
|
Web App开发 文字识别 测试技术
教你python自动识别图文验证码的解决方案!
对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动验证的。诸如此类的验证码,对我们的系统增加了安全性的保障,但是对于我们测试人员来讲,在自动化测试的过程中,无疑是一个棘手的问题。
2064 0
|
数据可视化 JavaScript 前端开发
VisualCaptcha – 灵活的可视化验证码解决方案
  visualCaptcha 是一个可配置的验证码解决方案,专注于可访问性和简单性,同时保持安全性。它也支持移动,视网膜设备,并有一个创新的可访问性的解决方案。 visualCaptcha 现在可以跨多个后端语言,不管你是使用 JavaScript ,Ruby 或 PHP,都可以使用 visualCaptcha。
940 0
dedecms 验证码老提示不正确的解决方案
1.三个字:权限不够,修改服务器上的IUSER的访问权限即可 类似的在phpcms中出现error_log.php错误的话只要修改权限即可!
749 0
|
Apache
phpcms(v9)验证码无法显示解决方案
1.首先直接启动下服务器(本人经历过,管用) 2.找到php.ini文件 搜索extension=php_gd2.dll这段代码 然后把前面的;符号去掉即可。 3.关键一点是获取验证码的图片与全局变量SITE_URL相关,也就是网站的目录,所以只要修改cache/configs/system.php文件中的网站路径变量‘web_path’ 即可。
1378 0
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】