2018-09-15 18:12:38 2003次浏览 3条回答 0 悬赏 10 金钱

想加载网页的时候加载yii生成的验证码到cookie,

或者点击刷新的时候验证码写到cookie里面

然后用js 判断,如果提交的验证码。和cookie不匹配,就阻止提交表单

好像之前看过一个教程,里面说yii的验证码是加密的,写到cookie也没用,没法解出来,

除了废除不用yii的验证码。还有啥办法吗,

最佳答案

  • shiyilin 发布于 2018-09-18 18:21 举报

    昨天回答过一次,但是账号没了,就重新回一次。
    Yii把验证码存到session里的,如果需要异步验证可以把session里的验证码拿到和异步提交的表单验证码做比较,就行了。这是我写的应该关于yii验证码的一个博客,你可以参考下解决Yii框架验证码生成后的不刷新问题

    1 条回复
    回复于 2018-09-19 07:40 回复

    我看了,谢谢大佬,我直接打印session 验证码居然是明文的,直接就能取。可能是我改了这个
    ['code', 'codeVerify', 'on' => ['reg']],

    public function codeVerify($attribute) {
        //参数:'captcha',即控制器中actions()内的名称'captcha';Yii::$app->controller,调用验证的当前控制器(必须设置)
        $captcha_validate  = new \yii\captcha\CaptchaAction('captcha',Yii::$app->controller);
        if($this->$attribute){
            $code = $captcha_validate->getVerifyCode();
            if($this->$attribute!=$code){
                $this->addError($attribute, '验证码错误');
            }
        }
    }
    
  • 回答于 2018-09-17 08:48 举报

    jq提交到后台验证呗

    1 条回复
    回复于 2018-09-17 11:37 回复

    呃 我是想打开网页的时候 顺便就把验证码加载出来,正确才能提交表单,
    我见完美世界的账号注册就是这样的,验证码不正确不给注册账号 不让post

  • 回答于 2018-09-18 13:54 举报

    验证码都是加密存储的,防止重复提交可以用csrf

    2 条回复
    回复于 2018-09-18 18:22 回复

    其实,yii框架处理验证码的时候,并没有加密,只是把验证码保存到session里而已,我看过源码

    回复于 2018-09-20 10:07 回复

    就是,都服务端了还加密干啥,没必要!

您需要登录后才可以回答。登录 | 立即注册
蛋蛋的蛋
主管

蛋蛋的蛋

注册时间:2018-04-02
最后登录:2024-03-11
在线时长:34小时29分
  • 粉丝4
  • 金钱64
  • 威望20
  • 积分604

热门问题