ThinkPHP做自動登陸及異位或加密COOKIE!
阿新 • • 發佈:2017-08-13
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!