获取图片验证码文字 JsonResult GetChoiceCode() 6 { 7 var data = new Stage.Com.Extend.StageModel.MoData(); imgCode = ValidateCode.GetInitImgCode(); ; Json(data); } 11 12 data.Data = imgCode.IndexType; 13 data.IsOk = true; Json(data); 16 } 获取验证码图片 FileResult GetValidateCode06() 24 { imgCode = new List<MoImgCode>(); 27 var bb_code = ValidateCode.CreateImgValidateStream(code, ref imgCode, strLen: 8); choiceList = imgCode.Where(b => b.IsChoice).ToList(); ; 31 if (Session[key] != null) 32 { 33 Session.Remove(key); 34 } 35 Session.Add(key, JsonConvert.SerializeObject(choiceList)); File(bb_code, ); 38 }
图片方法中用到了 Session.Add(key, JsonConvert.SerializeObject(choiceList)); 在获取生成的图片验证码后用session保存对应的待匹配(需要用户选择的验证码图片类型,也就是“企鹅”对应的图片)的验证码坐标,用户在用户提交操作按钮(我这是登录)的时候用于匹配,因此就有了如下在登录时候匹配用户提交的坐标验证码代码如下:
1 [HttpPost] 2 public JsonResult UserLogin01(string code) 3 { 4 var data = new Stage.Com.Extend.StageModel.MoData(); (; return Json(data); } ] == ; return Json(data); } ].ToString()); ; return Json(data); } codeArr = code.Split( }, StringSplitOptions.RemoveEmptyEntries); 13 foreach (var item in codeArr) 14 { ); ; break; } x = Convert.ToInt32(itemArr[0]); 19 var y = Convert.ToInt32(itemArr[1]); codeItem = compareImgCode. 22 Where(b => b.IsChoice). 23 Where(b => 24 (b.Point_B.X > x && b.Point_B.Y > y) && 25 (b.Point_A.X < x && b.Point_A.Y < y)). 26 SingleOrDefault(); ; break; } codeItem.IsChoice = false; 31 } 32 if (!string.IsNullOrWhiteSpace(data.Msg)) { return Json(data); } (compareImgCode.Any(b => b.IsChoice)) { data.Msg = ; return Json(data); } 35 36 data.IsOk = true; ; 38 return Json(data); 39 }
通过坐标的范围来确定用户选择的哪个小图片,这和传递验证码直接对比用户输入的信息和session保存的验证码信息对比逻辑差不多,只是图片验证码让第三方的一些识别软件很难破解,这里不得不说当初设计此验证码的大佬们的nb;下面我们再来看下mvc中的view中我代码是怎么写的:
1 <td> style=></span>”,<a style=id=>重获验证码</a><br /> style=> data-src=/> 5 </div> =>登 录</button> style=></span> 9 </td>