免费验证码控件
免费验证码控件

介绍
这个验证码控件是一个独立的 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 日:初始发布