原创:自动登录设计及实现

  很多网站都有“记住我”这样一个功能,登录时,如果点击“记住我”,则可以在指定时间内免登陆实现方法也多钟多样,以下是我的一个想法,欢迎讨论。

  原理:通过登录时生成自动登录加密字符串,存入数据库。当session过期后,通过异步请求,把存如cookie的加密字符串和用户id作为参数,检查该用户,如果存在则自动进行登录操作。

 

User.php

    public function login()
    {
      $this->user_model->set_autoload_cookies($r,$user,$u);//判断是否是点击记住用户名密码  
    }

 

User_model.php

注:

$autoload_sign是一个个常量,用户混淆加密,存入cookie的autoload_key为md5(“盐”+密码)及用户名两个变量
/**
     * 功能:判断是否是点击记住用户名密码
     * 设置cookies
     */
    public function set_autoload_cookies($r,$user,$u){
        if(isset($r)&&$r=='1'){
            $dataline = time()+2592000;//30天=3600*24*30
            setcookie('uid', $user->id, $dataline , "/" );
            $autoload_sign=$this->config->item('autoload_sign');
            $autoload_sign_str=md5($autoload_sign.$user->password);
            setcookie('autoload_key', $autoload_sign_str, $dataline , "/" );
            setcookie('loginname', $u, $dataline , "/" );
            $data['autoload_key']  = $autoload_sign_str;
        }

 

 

登录操作js:

页面初始化的js方法:

//查看用户是否登录start
$(function () {
    $.ajax({
        type: "post",
        url: "http://" + url + "/user/islogin",
        dataType: "json",
        data: {'uid': localStorage.getItem('uid')},
        async: true,
        beforeSend: function (request) {
            request.setRequestHeader("uid", localStorage.getItem('uid'));
        },
 success: function (json) {
            if (json.data.type == 'true') {
                //用户已经登录的具体操作
            }else{
               //用户未登录,查询是否设置自动登录
              $.ajax({
                    type:'post',
                    url:'http://'+url+'/user/autoload_login',
                    dataType:'json',
                    data:{
                        'uid':$.cookie("uid"),
                        'autoload_key':$.cookie("autoload_key")
                    },
                    async:'false',
                    success:function (json) {
                        if(json.data.type == 'true'){
                        //自动登录成功
                }else{
                       //自动登录异常
                }
            }                

 

User.php

自动登录方法

   /**
     * 功能:通过cookie登录
     */
    public function autoload_login(){
        $uid=$this->input->post('uid',true);
        $autoload_key=$this->input->post('autoload_key',true);
        $user = $this->user_model->findone_data_tomongodb('if_user',array('id'=>$uid,'autoload_key'=>$autoload_key));


        //如果用户已登录,不去重新创建session
        if(!empty(unserialize($_SESSION['sessuser']))){
            ajax_return(array('type'=>'has_login'),'用户已登录',1);
        }else{
            $this->user_model->set_session($user);//写入session
        }
        if(empty($user)){
            ajax_return(array('type'=>'no_user'),'无效用户',1);
        }else{
            ajax_return(array('type'=>'true'),'操作成功',1);
        }
    }

 

 

欢迎讨论。

 

posted on 2017-02-27 13:42  ziyi_ang  阅读(173)  评论(0编辑  收藏  举报

导航