ThinkPHP做自动登陆及异位或加密COOKIE!

异位或加密方法:

/*
 *登陆如果自动登陆加密
 *默认是0解密状态,1是加密 
 *采用的方法是异位或加密
 */
function encrytion($value,$type=0){
    $key = md5(C('AUTO_LOGIN_KEY'));
    //加密
    if($type){
        // 64位加密 
        //return base64_encode($value ^ $key);
        // 加密后可能会有等号
        return str_replace('=','',base64_encode($value ^ $key));
    };
    $value = base64_decode($value);
    return $value ^ $key;
}

在Config.php文件中设置异位或加密字段及自动登陆有效时间:

<?php
return array(
    //'配置项'=>'配置值'
    //异位或加密
    'AUTO_LOGIN_KEY' => md5('www.ask.com'),
    //自动登陆有效时间
    'AUTO_LOGIN_TIME' => time() +3600*24*7,
    'LV_LOGIN' => 1,
);

如果要自动登陆,设置cookie:保存自动登陆账号的ID,IP,和账号:(login控制器)

// 判断下一次是否自动登陆
if(isset($data['auto'])){
    $value = $user['id'].'|'.get_client_ip().'|'.$user['username'];
    //echo $value."<hr>"; // 需要保存的信息 1|127.0.0.1|赵子龙
    //进行加密
    $value = encrytion($value,1);
    //echo $value."<br>"; //加密结果
    //解密
    $val = encrytion($value,0);
    //echo $val; // 解密结果
    // 设置 COOKIE 
    @setcookie('auto',$value,C('AUTO_LOGIN_TIME'),'/');
};

判断COOKIE及自动登陆:

class CommonController extends Controller {
    Protected function _initialize(){
        //if(!C('WEB_STATE')){$this->error('网站正在维护中...');};
        //是否自动登陆
        //判断是否有COOKIE 且 没有登陆
        if(isset($_COOKIE['auto']) && !isset($_SESSION['uid'])){
            $value = $_COOKIE['auto'];
            $value = encrytion($value,0);
            //echo $value; // 1|127.0.0.1|赵子龙
            // 拆成数组
            $value = explode('|',$value);
            if($value[1] == get_client_ip()){
                session('uid',$value[0]);
                session('username',$value[2]);
            }
        };
    }
}

整个控制器:

<?php
namespace Home\Controller;
use Think\Controller;
class CommonController extends Controller {
    Protected function _initialize(){       
        //if(!C('WEB_STATE')){$this->error('网站正在维护中...');};
        //是否自动登陆
        //判断是否有COOKIE 且 没有登陆
        if(isset($_COOKIE['auto']) && !isset($_SESSION['uid'])){            
            $value = $_COOKIE['auto'];
            $value = encrytion($value,0);
            //echo $value; // 1|127.0.0.1|后盾网
            // 拆成数组
            $value = explode('|',$value);
            if($value[1] == get_client_ip()){
                session('uid',$value[0]);
                session('username',$value[2]);
            }
        };
    }
    public function login(){
        //if(IS_POST){$this->error('页面不存在');};
        $data = I('post.');
        //p($data);die;
        $dataPad = I('post.pwd','','md5');       
        $db = M('user');
        $where = array('account'=>$data['account']);
        $field = array('id','username','password','logintime','lock');
        $user = $db->where($where)->field($field)->find();   
        if(!$user || $user['password'] != $dataPad){
            $this->error('账号或密码错误');
        };
        // 如果正确就继续往下走
        // 判断是否锁定
        if(!$user['lock']){
            $this->error('账号被锁定');
        };
        // 判断下一次是否自动登陆
        if(isset($data['auto'])){
            $value = $user['id'].'|'.get_client_ip().'|'.$user['username'];
            //echo $value."<hr>"; // 需要保存的信息 1|127.0.0.1|赵子龙
            //进行加密
            $value = encrytion($value,1);
            //echo $value."<br>"; //加密结果
            //解密
            $val = encrytion($value,0);
            //echo $val; // 解密结果
            // 设置 COOKIE 
            @setcookie('auto',$value,C('AUTO_LOGIN_TIME'),'/');
        };
        //每天登陆增加经验
        // 读取它上一次的登陆时间,在和今天的 0点0时0分0秒 对比 如果小就是新登陆
        $today = strtotime(date('Y-m-d'));
        $where = array('id'=>$user['id']);
        if($user['logintime']<$today){
            $db->where($where)->setInc('exp',C('LV_LOGIN'));            
        }
        //更新时间
        $db->where($where)->save(array('logintime'=>time()));

        //写入到session
        session('uid',$user['id']);
        session('username',$user['username']);
        //从那个页面来就跳转到那个页面去
        redirect($_SERVER['HTTP_REFERER']);
    }
    //退出登录
    Public function logout () {
        session_unset();
        session_destroy();
        redirect(__APP__);
    }
}

 

posted @ 2017-08-12 23:06  帅到要去报警  阅读(690)  评论(0编辑  收藏  举报