1. 程式人生 > >ThinkPHP做自動登陸及異位或加密COOKIE!

ThinkPHP做自動登陸及異位或加密COOKIE!

config referer count ont int end oda where tinc

異位或加密方法:

/*
 *登陸如果自動登陸加密
 *默認是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__);
    }
}

ThinkPHP做自動登陸及異位或加密COOKIE!