ASP.NET2.0中Login控件中添加其他验证信息(如:验证码)

ASP.NET2.0中集成的成员控制可以方便我创建 登录,注册,修改密码,找回密码 等一系列的用户认证授权.

可在集成的Login控件中却没有验证码,可做有些网站时客户又非要用验证码,这就需要改写Login控件了.

关于生成验证码的代码,网上有很多,生成效果也都不错,其实参考别人写的代码自己重新写一个也是很简单的,反正就是两大步,

一:生成足够随机的随字符.

二:生成的随机字符转成图片,加上干扰元素.

而且可以有自己的特色.

 

生成的图片放到网页上也简单的用一个<IMG ... />就可以了,

一个问题来了,图片贴上去了可"看不清,换一张"这个功能怎么实现.

经过我的摸索发现,可以在放<img.../>标记外放一个<span id="XXX"></span>

 

然后写一个JS文件

<script language="Javascript" type="text/javascript" >

function Showcode(menu)
{
    var tempElement =document.getElementById(menu);
    tempElement.innerHTML ="<img src=/"bbb/ccc.ashx/" />";
}
function dcode(menu)
{
    var tempElement =document.getElementById(menu);
    tempElement.innerHTML ="验证图";
}

</script>

然后拖一个html的text控件

<input id="aaa" type="text" runat="server" οnfοcus="Showcode('XXX')" οnblur="dcode('XXX')"  />

 

这样.只要光标点到这个控件,就会在<span></span>标记中出现验证图,光标点到其他地方验证图会消失,

再点到这控件就会换一张图片了.

 

接下去的问题是怎么在验证用户名和密码前先判断验证码;

在Login控件中添加Authenticate事件;

 

事件中这么写:

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        string Codetext = ((HtmlInputText)login1.FindControl("ValidateTextbox")).Value;
        if (Session["CodeString"] == null)   //CodeString是在图片生成页中设置的Session
        {
            login1.FailureText = "验证码不能为空!";
            e.Authenticated = false;
            return;
        }
        string CodeString = Session["CodeString"].ToString();
        if (CodeString == Codetext)
        {
            if (Membership.ValidateUser(login1.UserName, login1.Password))     //必须有这个判断,网上很多都没有这个判断,
            {                                                                                                              //导致只要验证码对了,不管用户是否存在,
                Session.Remove("CodeString");                                                    //用户名是否对,都会成功登录,这是千万要注意的
                e.Authenticated = true;
                return;
            }
            else
            {
                login1.FailureText = "用户名或密码错误!";
                Session.Remove("CodeString");
                e.Authenticated = false;
                return;
            }
        }
        else
        {
            login1.FailureText = "验证码错误!";
            Session.Remove("CodeString");
            e.Authenticated = false;
            return;
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值