65.9K
CodeProject 正在变化。 阅读更多。
Home

免费验证码控件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.64/5 (9投票s)

2009年12月9日

CPOL

2分钟阅读

viewsIcon

46646

downloadIcon

3459

免费验证码控件

image1.png

image2.png

image3.png

介绍 

这个验证码控件是一个独立的 Web 控件。它易于使用且安全。它可以防止自动注册。

背景

我被要求在一个注册页面上添加验证码验证。我在 CodeProject 上找到了一篇文章,正好符合要求。这篇文章解决了那个任务,但我对必须引用 ASPX 页面、需要会话变量、不易于自定义以及扭曲整个图像而不是字母感到不太满意。我正在休假,花一个晚上创建一个控件来分享和供将来参考。

Using the Code

在页面上添加对控件的程序集引用

<%@ Register Namespace="CaptchaControl" Assembly="CaptchaControl" TagPrefix="cc" />

在页面上添加 CaptchaControl 标签

<cc:CaptchaControl ID="captcha" runat="server"  
	CharCount="5" Width="200" CharSet="AllLowerCaseLetters"/>

在回发时,调用 captcha.Validate(userinput) -- 其中 userinput 是用户输入的内容。

控件的默认值是

public CaptchaControl()
{
    IgnoreCase = true;
    CharCount = 3;
    this.Width = new Unit(120);
    this.Height = new Unit(50);          
    Password = this.GetType().AssemblyQualifiedName;
    CharSet = CharSets.NumberAndLetters;
}

已知问题

当同时打开两个用户或浏览器窗口的页面时,如果一个用户(user1)的输入通过验证,而另一个用户刷新页面,如果 user1 再次点击提交按钮,并使用新图像中的输入,该用户将收到“验证失败”的消息。

这是因为 viewstate 中的代码与新图像中的代码不再匹配。这个问题在实际应用中不应该成为问题,因为我们通常希望在验证成功后重定向到不同的页面。如果我们将图像文件名附加一个 GUID ID,可以解决这个问题,但这种方法会引入一个新问题,即创建大量的图像。

每个字符需要大约 40px 的空间,如果您将 CharCount 增加 1,您应该将 Width 增加 40 以防止字符图像被截断。

关注点

添加噪声和扭曲字符位图图像很有趣。这是我阅读的文章中的一个主要优势特性。如果您有任何扭曲图像的绝妙方法,请在此处发布,我将将其添加到项目中。

这个控件将加密的代码存储在 viewstate 中,密码可以在 HTML 标记或以编程方式设置。

我在此主题上的下一步是尝试为 ASP.NET MVC 创建一个 HTML 辅助函数。

历史

  • 2009 年 12 月 9 日:初始发布
© . All rights reserved.