CI鉤子實現登錄滿6小時,提示重新登錄

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...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章