<?php /** * Created by PhpStorm. * User: andy * Date: 2018/4/3 * Time: 14:17 */ namespace CommonModelDataModel; class CheckTokenModel { private $key='sdksjfkdsgshhbdbvdjvbdvvoisjvnvohsvsnj';//密钥 private $time=300;//token过期秒数 /** * @desc 创建token */ public function creatToken($type) { list($usec, $sec) = explode(" ", microtime()); $time=((float)$usec + (float)$sec); $str = md5(session_id().$time*1000000).time();//生成token的原始字符串 $key = md5($this->key);//密钥 $code=$this->encrypt($str, 'E', $key); session('TOKEN', $code); return session('TOKEN'); } /** * @desc 校验token */ public function checkToken($token,$type_token='') { if(empty($token)) return FALSE; //校验token是否已经过期 $originalToken=$this->encrypt($token, 'D', md5($this->key)); $originalTimestamps=substr($originalToken,32); if($originalTimestamps+$this->time<time()) E('110103'); if ($token == session('TOKEN')) { session('TOKEN',null); return TRUE; } else { return FALSE; } } /** * @desc 加密/加密 (E/D) */ function encrypt($string,$operation,$key=''){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; $string_length=strlen($string); $rndkey=$box=array(); $result=''; for($i=0;$i<=255;$i++){ $rndkey[$i]=ord($key[$i%$key_length]); $box[$i]=$i; } for($j=$i=0;$i<256;$i++){ $j=($j+$box[$i]+$rndkey[$i])%256; $tmp=$box[$i]; $box[$i]=$box[$j]; $box[$j]=$tmp; } for($a=$j=$i=0;$i<$string_length;$i++){ $a=($a+1)%256; $j=($j+$box[$a])%256; $tmp=$box[$a]; $box[$a]=$box[$j]; $box[$j]=$tmp; $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); } if($operation=='D'){ if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ return substr($result,8); }else{ return''; } }else{ return str_replace('=','',base64_encode($result)); } } }