簡單的行為控制管理方法,自動登錄,session定時驗證碼過期


代碼很簡單 實現的方式很多,用cookies 用static 變量 file文件緩存 等等 

比如

 
         
//簡單行為管理,如果請求此方法次數多於5次,就顯示驗證碼 吧當前方法的name傳進來,有效時間是5分鍾,$return=1是增加,$return=2就是只是返回$_COOKIE[$name]的值
function behavior_function($function = __FUNCTION__, $class = __CLASS__, $return=1) {

    $name = 'behavior_' . $class . '_' . $function;
    if($return ==1) {
        setcookie($name, $_COOKIE[$name] + 1, time() + 3000, "/");
    }elseif($return ==2){
        return $_COOKIE[$name] > 5 ? true : false;
    }
}
 
         

 


調用
 
          
public function index() {
        if (IS_POST) {
            //嘗試登陸次數增加
            behavior_function(__FUNCTION__, __CLASS__,1);
           
        } else {
            $res =  behavior_function(__FUNCTION__, __CLASS__,2);
            $codes = $res === true ? 1 : NULL;
            $this->assign("codes", $codes);
            $this->display();
        }
    }
 
          

 

//為了微信頁面好看,將中文字符小於4的補充空格

function cn_string_to_4($str) {
if(mb_strlen($str,'utf8') <4){
return $str = $str.str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', (4-mb_strlen($str,'utf8')));
}
return $str;
}

 

通過cookies,做一個簡單的。使用session做過期驗證碼的功能

這有2個版本

/*
 * 設置一個定時有效的session值, tp的session函數貌似沒有這個功能
 * 
 * $time 格式是實踐戳
 * 
 * $type      1  儲存 和 更新session存活時間
 *       2  查看獲取
 *       3  銷毀  
 */

function session_limit_time_save($type=1,$name='', $value = '', $expire = '') {

    $session_time_name = $name . "_time";
    $session_expire = $name . 'expire';
    switch ($type) {
        case 1:
            $_SESSION["$name"] = $value;
            $_SESSION["$session_time_name"] = time();
            $_SESSION["$session_expire"] = $expire;
            break;
        case 2:
            if (time() - $_SESSION["$session_time_name"] > $_SESSION["$session_expire"]) {
                //訪問過期session,就銷毀
                unset($_SESSION["$name"]);
                unset($_SESSION["$session_time_name"]);
                unset($_SESSION["$session_expire"]);
                return NULL;
            } else {
                return $_SESSION["$name"];
            }
            break;
        case 3:
            unset($_SESSION["$name"]);
            unset($_SESSION["$session_time_name"]);
            unset($_SESSION["$session_expire"]);
            break;
        default:
            echo '數據處理模式錯誤!';
            break;
    }
}

這個不太好,因為在$_SESSION上可以看到其他的值,其實一般都是借助cookies來實現過期判斷

比如 

$time = 30 * 30;//半小時過期
setcookie(session_name(), session_id(), time() + $time);

我還嘗試過使用,直接訪問session的temp文件,去實現過期,但是發現,session存的數據格式是

ss|s:4:"1111";ees|s:4:"1111";e1es|s:2:"55";ee2s|s:2:"22";ee3s|s:6:"155111";

沒有存放過期時間,是通過設置的全局過期時間,做創建時間過期,刪除和更新的

偽代碼:

$session_path = "sess_".session_id();

$sessionpath = session_save_path(); 

$file_name_path = $sessionpath.'/'.$session_path;


//$a=filemtime($file_name_path);
$a=filectime($file_name_path);
//$a=fileatime($file_name_path);
$r = date("Y-m-d H:i:s",$a);
var_dump($r);

$rr = get_cfg_var('session.gc_maxlifetime');
var_dump($rr);

發現效果不是很好,最后決定借用cookies來做定時過期

 

 

 

 

自動登錄

原理很簡單就是在你需要控制的需要登錄控制的父控制器做一個__construct方法,在登錄的去set一個cookies ,可解密的加密算法,

public function __construct() {

   //解密

}

 當然在登錄的時候記得讓cookies 過期,不然會出現,退出依然可以登錄問題

訪問需要權限的時候,去獲取cookies,解密獲取賬號和密碼,在去模擬登錄,創建session,和登錄差不多,cookies沒有就什么都不做就,讓權限系統去出路頁面訪問權限


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM