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();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章