我有个手机注册功能,需要获取短信验证码,在页面上点击“获取短信验证码”按钮后,
我在后台controller层直接session_start();$_SESSION['code'] = '123456';设置验证码到session中,然后发送给手机,手机获取到验证码后,输入并提交表单,然后我又到后台model层去验证输入的验证码和session中保存的验证码是否相同,结果我比对时却取不到$_SESSION['code']的值了,请问应该怎么设置这个session呢?sessionphp验证码

解决方案 »

  1.   

    请确认 session_start() 已被执行
      

  2.   


    session_start()在构造函数中就设置了。
      

  3.   


    <?php
    class passport{
        function __construct(){
            session_start();
        }    function getMobileCode($mobile){
            $random = $objmember->randCode();//获取6位随机码
            $_SESSION['MOBILE_CODE'] = $random;
        }    function signup(){
            if(!$this->checkCode($_POST['vcode'],$msg)){
                echo $msg;
            }else{
                echo '注册成功';
            }
        }    function checkCode($vcode,&$msg){
            if(trim($vcode) == ''){
                $msg = '短信验证码为空!';
                return false;
            }elseif(trim($vcode) != trim($_SESSION['MOBILE_CODE'])){
                $msg = '短信验证码错误!';
                return false;
            }else{
                return true;
            }
        }}我首先调用了getMobileCode()方法获取验证码获取到验证码后,调用signup()方法验证输入的验证码是否和保存在session中的验证码一致signup()方法验证验证码时调用了checkMobileCode()方法去验证,
    这时输入的验证码和session中的验证码比对,
    而session中的验证码却取不到了,为空NULL,没有值!
      

  4.   


    代码如楼上我首先调用了getMobileCode()方法获取验证码获取到验证码后,调用signup()方法验证输入的验证码是否和保存在session中的验证码一致signup()方法验证验证码时调用了checkCode()方法去验证,
    这时输入的验证码和session中的验证码比对,
    而session中的验证码却取不到了,为空NULL,没有值!
      

  5.   

    本帖最后由 xuzuning 于 2013-10-22 11:18:05 编辑
      

  6.   


    checkCode方法里来的,关键这个msg不碍session的事啊
      

  7.   


    我就是在checkCode方法中打印了一下$_SESSION['MOBILE_CODE']值为NULL
      

  8.   

    太好了!我解决了,小高兴一下,嘿嘿!分享给大家。我这种做法相当于验证同一用户的不同会话,在一次请求之后,请求第二次回话就找不到session了,所以在请求第一次时需要把session保存起来,我们要使用session_id()来实现。首先,在请求getMobileCode()方法时,将生成的验证码保存到session中,代码如下:
    function getMobileCode(){
        $random = $objmember->randCode();
        session_start();
        $sessionid = session_id();
        $_SESSION['MOBILE_CODE'] = $random;    //然后将返回信息以及$sessionid发送给客户端
    }然后,客户端接收到验证码和$sessionid,在第二次请求signup()方法时,通过$sessionid得到session的值,代码如下:
        function signup($sessionid){
            if(!$this->checkCode($_POST['vcode'],$sessionid,$msg)){
                echo $msg;
            }else{
                echo '注册成功';
            }
        }    function checkCode($vcode,$sessionid,&$msg){
            session_id($sessionid);
            session_start();
            $session_code = $_SESSION['MOBILE_CODE'];//这样这里就能获取到保存在session里的验证码了
            if(trim($vcode) == ''){
                $msg = '短信验证码为空!';
                return false;
            }elseif(trim($vcode) != trim($session_code)){
                $msg = '短信验证码错误!';
                return false;
            }else{
                return true;
            }
        }
    如有错误敬请更正!
    如果其它解决方案敬请分享!
      

  9.   

    用echo语句显示下$_SESSION[mobilecode]
      

  10.   

    你可以尝试将session_start放的类名上面,而不是放在类的构造函数中
      

  11.   

    顺便引用一下http://blog.csdn.net/k8080880/article/details/7487859博主介绍了注销session的相关内容,互相学习一下,在此谢谢博主!