PHP会员登录实现记住密码功能 thinkPHP5

会员登录实现记住密码功能需要用到cookie 和session,首先我们来简单了解一下cookie 和session 的区别

Cookie
Cookie是完全保存在客户端。当客户端禁止cookie时将不能再使用;对服务端压力较小;可以指定生存周期;安全性差。
Session
Session是存放在服务端的。服务端压力较大;关闭浏览器后,session失效;安全性较好。

当制作单纯的会员登录功能,我们只使用session 就可以,但是要实现记住密码功能 就得再加上cookie了,因为cookie 不会随着浏览器关闭而消失,从而实现了下次打开浏览器用户依然是登录的状态

直接上代码

    <div class="user-layout clearfix">
      <div class="formlr-box"><form id="user-form" method="post">
        <h3>{:lang('log_in')}</h3>
        <ul>
          <li><span>{:lang('form_email')}</span><input type="input" placeholder="" id="email" name="email"/></li>
          <li><span>{:lang('form_password')}</span><input type="password" placeholder="" id="password" name="password"/></li>
        </ul>
        <div class="forgot">{:lang('remember_me')}</div>
        <input type="hidden" name="remember" id="remember" value="0"/>
        <button type="button" onclick="checkForm()">{:lang('log_in')}</button>
        <div class="other"><a href="{:url('reg')}">{:lang('reg')}</a> | <a href="{:url('forget')}">{:lang('forget_pass')}</a></div>
      </form></div>
    </div>
    <script type="application/javascript">
      function checkForm(){
        var email = $("#email").val();
        var password = $("#password").val();
        var formdata = $("#user-form").serializeArray();
        if(email == ''){
          alert("{:lang('alert_no_email')}");
          $("#email").focus();
          return false;
        }
        if((!isEmail(email))){
          alert("{:lang('alert_err_email')}");
          $("#email").focus();
          return false;
        }
        if(password == ''){
          alert("{:lang('alert_no_password')}");
          $("#password").focus();
          return false;
        }
        $.post("{:url('login')}", { "formdata": formdata },function(res){
          if(res.code == 0){
            window.location.href=res.callback;
          }else{
            alert(res.message);return false;
          }
        }, "json");
      }
      /*判断邮箱格式*/
      function isEmail(str){
        var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;
        return reg.test(str);
      }
      $('.forgot').on('click',function(){
        if($(this).hasClass('active')){
          $(this).removeClass('active');
          $('#remember').val(0);
        }else{
          $(this).addClass('active');
          $('#remember').val(1);
        }
      })
    </script>
    public function login(){
        if (Request::instance()->isPost()){
            $formdata = input('post.formdata/a');$data = array();
            $username = $formdata[0]['value'];
            $password = $formdata[1]['value'];
            $remember = $formdata[2]['value'];
            /*检查用户是否存在*/
            $member = $this->MemberDb->where(array('email'=>$username,'is_status'=>1))->find();
            if($member){
                /*检查密码是否正确*/
                if($member['password'] != md5($password)){
                    ajax_return('','Password input error',1);
                }else{
                    $auth = array(
                        'uid'       => $member['uid'],
                        'username' => $member['username']
                    );
                    session('member_auth', $auth);
                    if($remember == 1){
                      cookie('union_member_auth', $auth, time()+3600*24*30);//保存时间为30天
                    }
                    ajax_return('','Success',0,url('index'));
                }

            }else{
                ajax_return('','user does not exist',1);
            }
        }
        /*Mate信息*/
        $meta_title = 'Login - '.$this->Config['sitename'];
        $meta_keywords = '';
        $meta_description = '';
        $this->assign('meta_title', $meta_title);
        $this->assign('meta_keywords', $meta_keywords);
        $this->assign('meta_description', $meta_description);
        /*模板渲染*/
        return view();
    }
发布了42 篇原创文章 · 获赞 26 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/doukalove/article/details/103742019
今日推荐