一.说明
此文是小白在学习张晨光老师的视频教学<< WEB服务器编程技术>>中做的学习笔记,一些知识点也是跟着教程走的,大家也可以去老师的主页去学习,谢谢大家.
二.生成验证码图片(checkcode.aspx.cs)
using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace MyMusci{public partial class checkcode : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){string chkCode = string.Empty;int ix, iy;ix = 80;iy = 24;//颜色列表,用于验证码、噪线、噪点 Color[] color = {Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };//字体列表,用于验证码 string[] font = {"Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "MingLiU", "Arial" };//验证码的字符集,去掉了一些容易混淆的字符 char[] character = {'2', '3', '4', '5', '6', '8', '9','0','1','一','小','白' };Random rnd = new Random();//生成验证码字符串 for (int i = 0; i < 4; i++){chkCode += character[rnd.Next(character.Length)];}Bitmap bmp = new Bitmap(ix, iy);Graphics g = Graphics.FromImage(bmp);g.Clear(Color.White);//画噪线 for (int i = 0; i < 10; i++){int x1 = rnd.Next(ix);int y1 = rnd.Next(iy);int x2 = rnd.Next(ix);int y2 = rnd.Next(iy);Color clr = color[rnd.Next(color.Length)];g.DrawLine(new Pen(clr), x1, y1, x2, y2);}//画验证码字符串 for (int i = 0; i < chkCode.Length; i++){string fnt = font[rnd.Next(font.Length)];Font ft = new Font(fnt, 14, FontStyle.Bold);Color clr = color[rnd.Next(color.Length)];g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 16 + 2, (float)2);}//画噪点 for (int i = 0; i < 50; i++){int x = rnd.Next(bmp.Width);int y = rnd.Next(bmp.Height);Color clr = color[rnd.Next(color.Length)];bmp.SetPixel(x, y, clr);}//将验证码写入SESSION,为什么第二个页面没法获取值???//一般处理程序增加接口文件;Session["Code"] = chkCode.ToUpper();//清除该页输出缓存,设置该页无缓存 Response.Buffer = true;Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);Response.Expires = 0;Response.CacheControl = "no-cache";Response.AppendHeader("Pragma", "No-Cache");//将验证码图片写入内存流,并将其以 "image/Png" 格式输出 //我这个页面返回的是图片;MemoryStream ms = new MemoryStream();try{bmp.Save(ms, ImageFormat.Png);Response.ClearContent();Response.ContentType = "image/Png";Response.BinaryWrite(ms.ToArray());}finally{//显式释放资源 bmp.Dispose();g.Dispose();}}}}
三.登录页面添加验证码(login_new.aspx)
在table中添加如下代码
<tr><td>验证码</td><td><asp:TextBox ID="code" runat="server"></asp:TextBox></td><td><img id="imgcode" src="checkcode.aspx" /></td></tr><tr><td><asp:Button ID="btn_sub" runat="server" class="btn btn-primary" OnClick="btn_sub_Click" Text="登录" /></td><td><%--此处将重置按钮替换为注册(LinkButton)控件PostBackUrl 表示控件点击后跳转的位置CausesValidation="False" 表示不用通过验证控件便可以跳转位置--%><asp:LinkButton ID="LinkButton1" runat="server" class="btn btn-secondary" PostBackUrl="~/RegUser.aspx" CausesValidation="False">注册</asp:LinkButton></td><td> </td></tr>
加入jquery.js,并添加如下脚本:
<script>//图片点击事件$("#imgcode").click(function () {$("#imgcode").attr("src", "checkcode.aspx?t=" + Math.random());})</script>
当我们每次点击图片时,会刷新图片的内容,也就时验证码的内容: