網(wǎng)站首頁 編程語言 正文
一、概述
一般處理程序 ashx :它沒有服務器控件,用response輸出什么就是什么。
生成驗證碼原理:產(chǎn)生隨機字符,并將字符生成為圖片,同時儲存到Session里去,然后驗證用戶輸入的內(nèi)容是否與Session中的驗證碼相符即可。
效果圖:用戶可以點擊切換驗證碼信息。
二、一般處理程序
public class CheckCodeHandler : IHttpHandler, IRequiresSessionState//使用到Session,需要實現(xiàn)此接口IRequiresSessionState
{
private int intLength = 5; //長度
private string strIdentify = "Identify"; //隨機字串存儲鍵值,以便存儲到Session中
/// <summary>
/// 生成驗證圖片核心代碼
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
//背景用白色填充
Bitmap map = new Bitmap(200, 60);
Graphics g = Graphics.FromImage(map);
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);
//將隨機生成的字符串繪制到圖片上
string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
Random r = new Random();
StringBuilder s = new StringBuilder();
Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
for (int i = 0; i < intLength; i++)
{
s.Append(letters.Substring(r.Next(0, letters.Length - 1), 1));
g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));
}
font.Dispose();
context.Session[strIdentify] = s.ToString(); //先保存在Session中,驗證與用戶輸入是否一致
//生成干擾線條,混淆背景
Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
for (int i = 0; i < 10; i++)
{
g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
}
pen.Dispose();
//設置輸出流圖片格式
context.Response.ContentType = "image/gif";
map.Save(context.Response.OutputStream, ImageFormat.Gif);
map.Dispose();
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
三、在頁面調(diào)用
<img src="CheckCodeHandler.ashx" alt="驗證碼" style="width: 60px; height: 24px" />
if (this.TextBox1.Text.ToUpper().Trim() != Session["strIdentify"].ToString().ToUpper().Trim())
{
Response.Write("<script>alert('驗證碼不正確')</script>");
}
else
{
Response.Write("<script>alert('登錄成功')</script>");
}
原文鏈接:https://www.cnblogs.com/springsnow/p/9433975.html
相關推薦
- 2022-02-16 向一組數(shù)組對象中,添加新的屬性值。和判斷這個數(shù)組對象中,某個屬性是否值都一樣
- 2022-04-24 torch.utils.data.DataLoader與迭代器轉換操作_python
- 2022-07-29 Jetpack?Compose實現(xiàn)列表和動畫效果詳解_Android
- 2022-06-02 Android超詳細講解組件LinearLayout的使用_Android
- 2022-08-05 RedisConfig 配置文件
- 2022-11-02 Rust指南枚舉類與模式匹配詳解_Rust語言
- 2022-10-23 Linux服務器VPS的Windows?DD包詳細的制作教程_Linux
- 2022-09-13 C語言實現(xiàn)統(tǒng)計一行字符串的單詞個數(shù)_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支