词条统计
浏览次数:5635 次
编辑次数:3次 历史版本
最近更新:2013/6/20
创建者:掷鸡蛋者

验证码是所有在线网站的必备功能,可以有效防御各种垃圾广告,但在框架之前的几个版本,使用验证码比较繁琐,从1.6开始,功能大大简化,只要几个步骤。


使用验证码


1)在网站中开始验证码功能。请打开网站根目录下的 web.config,然后在 httpHandlers 第一行添加:

<add verb="*" path="CaptchaImage.ashx" type="wojilu.Web.Handler.CaptchaImageHandler, wojilu"/>


2)在视图代码中,设置一个需要使用验证码的占位符

<div>请输入验证码:#{ValidationCode}</div>


3)在服务端代码中,给这个验证码赋值

set( "ValidationCode", Html.Captcha );


就这么简单,验证码出来了。它包括一个input输入框 + 右侧的一个验证码图片 + 换一张文字提示(图片本身也可以点击切换)。


验证码检验


验证码的意义在于验证用户的值是否有效,所以你需要在服务端检验这个验证码的值。


请在action中输入这样的代码来检测:

bool isValid = Html.Captcha.CheckError( ctx );


如果用户提交的验证码是对的,则返回true,否则返回false。因为你将ctx作为参数传递进去,所以如果验证错误,框架会将错误信息放在ctx的errors属性中。所以你可以通过 ctx.HasErrors 进行检测,比如

Html.Captcha.CheckError( ctx );

if( ctx.HasErrors ) {

    echoError();

    return;

}


如果你还想获取验证码的正确的值,你可以通过它的 CorrectCode 方法获取:

String correctCode = Html.Captcha.CorrectCode( ctx );


如果你想获取用户提交的实际的代码,通过它的 ClientCode 方法获取:

String userCode = Html.Captcha.ClientCode( ctx );


配置验证码


目前验证码支持英文、数字、英文数字混合以及中文4种类型,你可以通过修改配置文件来设置验证码的类型。


请打开/framework/config/site.config,增加如下几行配置:

ValidationType : 0

ValidationLength : 6

ValidationChineseLength : 2


其中 ValidationType 表示验证码的类型,有4种类型:0表示数字,1表示英文字母,2表示字母和数字混合,3表示中文。如果没有这项配置,框架使用默认值,默认是数字。


ValidationLength 顾名思义,表示验证码字符的长度。如果是中文验证码,还需要设置 ValidationChineseLength 的值,因为中文验证码不用过长,6个数字的验证码比较普通,但6个中文的验证码就比较变态,最好改成短一点的,比如2个字符长度。默认英文和字母验证码的长度是6,中文验证码的长度是2。


特别提醒:修改配置之后,如果要想及时生效,请重启网站。


补充:关于名称


为什么验证码的名称 Captcha 这么古怪?其实它差不多已经是一个专有名词,Captcha 是 Completely Automated Public Turing Test To Tell Computers and Humans Apart 的缩写,约定俗成,就不改简单的写法了。