图形验证码最佳攻略2

下面是注册

如果是手机用户注册,需要发送短信验证码

 说明:

发送图形验证码是为了拦截发送短信的.但是不拦截"注册帐号"

但是,用户体验很别扭,因为图形验证码很显然是错误的,但是却可以注册成功.

 如果点击注册帐号 ,也要校验图形验证码,那就让用户输入两次图形验证码,显然不是很人性化

注意:注册时发送短信每次都需要输入图形验证码,而不是发送3次短信才要输入.

那么如何解决这个问题呢?

把注册拆分为两步:

第一步:发送短信验证码

 

第二步:设置密码和用户名

 

这样达到的目的:

(1)可以通过图形验证码拦截发送手机短信;

(2)注册流程只需要输入一次图形验证码

每次校验图形验证码,都刷新后台的图形验证码

 /***
     * 校验图形验证码
     *
     * @param request
     * @param response
     * @param authImage
     * @return : 返回null则表示校验通过
     */
    public WapResponseDto verifyImageCode(HttpServletRequest request,
                                          HttpServletResponse response,
                                          String authImage) {
        //检查是否需要校验图形验证码
        WapResponseDto wapResponseDto = null;
        if (isNeedImageCode(request, response)) {//需要图形验证码
            String authCode1 = getAuthCode(request, response);
            if (!VerifyCodeUtils.checkAuthImageCode(authImage, authCode1)) {
                wapResponseDto = new WapResponseDto();
                wapResponseDto.setResult(false);
                wapResponseDto.setErrorFieldName("authImage");
                wapResponseDto.setErrorMessage("图形验证码错误,请重新输入");
                wapResponseDto.setNeedAuthImage(true);
                resetAuthImageCode(request, response);//不管是否校验通过,都会刷新服务器端的图形验证码
                return wapResponseDto;
            }
        }
        resetAuthImageCode(request, response);
        return null;
    }

 

 应用:

 

现在需要定一个图形验证码什么刷新的规则 

问题:获取图形验证码图片时,会刷新吗?

会,并且必须刷新

如果不刷新的话,每次返回的图片都会显示相同的验证码

问题:校验完图形验证码之后,需要刷新服务器端的图形验证码吗?

不仅要刷新前端的图形验证码图片,而且还要刷新服务器端的图形验证码

如果不刷新服务器端的图形验证码,就会有一个漏洞:

黑客获取到一个图形验证码之后,使用工具不断的访问,这样的话,图形验证码每次都能校验通过.

猜你喜欢

转载自hw1287789687.iteye.com/blog/2264341