zoukankan      html  css  js  c++  java
  • 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 HomeController;
    use ThinkController;
    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__);
        }
    }
  • 相关阅读:
    Oracle查看占用表空间最大的表(排序)
    Access denied for user 'test'@'%' to database 'mysql'
    DB2新建编目及删除编目
    DB2备份恢复schema
    Linux/Aix日常报错整理
    Oracle查看存储过程最后编辑时间
    No X11 DISPLAY variable was set
    数据库的数据进行改动,Cognos报表展示未及时更新
    Oracle数据库学习笔记_常用分区partition操作语句
    Oracle数据库学习笔记_sql 语句NVL()用法
  • 原文地址:https://www.cnblogs.com/e0yu/p/7351997.html
Copyright © 2011-2022 走看看