CI鉤子的簡單配置
config/hooks.php
$hook["post_controller_constructor"][] = array( //掛鉤點根據自己的需求寫
'class' => 'CheckRelogin',
'function' => 'checkLogin',
'filename' => 'CheckRelogin.php',
'filepath' => 'hooks'
);
CI手冊上的,根據自己的需要來選擇掛鉤點
以下是所有可用掛鉤點的一份列表:
- pre_system 在系統執行的早期調用,這個時候只有 基準測試類 和 鉤子類 被加載了, 還沒有執行到路由或其他的流程。
- pre_controller 在你的控制器調用之前執行,所有的基礎類都已加載,路由和安全檢查也已經完成。
- post_controller_constructor 在你的控制器實例化之後立即執行,控制器的任何方法都還尚未調用。
- post_controller 在你的控制器完全運行結束時執行。
- display_override 覆蓋 _display() 方法,該方法用於在系統執行結束時向瀏覽器發送最終的頁面結果。 這可以讓你有自己的顯示頁面的方法。注意你可能需要使用 $this->CI =& get_instance() 方法來獲取 CI 超級對象,以及使用 $this->CI->output->get_output() 方法來 獲取最終的顯示數據。
- cache_override 使用你自己的方法來替代 輸出類 中的 _display_cache() 方法,這讓你有自己的緩存顯示機制。
- post_system 在最終的頁面發送到瀏覽器之後、在系統的最後期被調用。
在hooks文件夾下創建對應的類 CheckRelogin.php 簡單實例如下:
<?php
class CheckRelogin
{
private $CI;
//判斷是否登錄滿6小時需要重新登錄
public function checkLogin()
{
$this->CI = & get_instance();
//若請求的url中的方法是MY_Controller這個基類中的 則放行
$whiteList = get_class_methods('MY_Controller');
$con = $this->CI->router->fetch_class(); //獲取當前類名
$func = $this->CI->router->fetch_method(); //獲取當前方法名
if (in_array($func, $whiteList)) return true;
if ($con == "Login") return true; //登錄控制器
$index_func = array("reLogin","doRelogin"); //頂部的父框架
if ($con == "Defaults" && in_array($func,$index_func)) return true;
$now = time();
$login_time = get_cookie("login_time");
$diff_hours = floor(($now-$login_time)/3600);
if($diff_hours >= 6){
$this->CI->load->view("Index/doRelogin");
}
}
}
思路:登錄時,把登錄時間寫入到cookie裏面,鉤子裏面去取值和當前時間對比,超過則提示(post_controller_constructor此掛鉤點是在所有方法執行前執行的 )
Mark it...