【问题标题】:get Session Data in Hook in CodeIgniter在 CodeIgniter 的 Hook 中获取会话数据
【发布时间】:2018-08-12 22:12:48
【问题描述】:

我正在使用 codeigniter 我想使用 Hooks 进行登录身份验证。这意味着我想在每个控制器中检查会话数据和登录时间。因为我在会话中插入了登录时间。如果登录与否以及他登录后的时间。这样我就想使用钩子。 我想从数组中访问 session->userdata 值,但我不知道如何获取这些值 来自 tht 数组的值。我想从数组中获取记录的时间,并在用户单击或在站点上导航时更新。这是我的代码:

//enter code here
$hook['post_controller_constructor'][] = array(
                           'class'    => 'Authenticate',
                           'function' => 'loginCheck',
                           'filename' => 'authenticate.php',
                           'filepath' => 'hooks',
                           'params'   => array()
                           );

class Authenticate
{

    private $CI;

    function __construct()
    {
        $this->CI =& get_instance();

        if(!isset($this->CI->session)){  //Check if session lib is loaded or not
              $this->CI->load->library('session');  //If not loaded, then load it here
        }
    }

   function loginCheck()
   {

        if(!$this->CI->session->userdata){
            if($this->CI->session->userdata('uid')=="XYZ")
            {
                echo "Valid User"; //it wont get inside this if
            }
        }
    }
}

我有数据:

$this->CI->session->userdata array :
Array ( [session_id] =>afaf... [ip_address] => ::1 [user_agent] => Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 [last_activity] => 1408553094 [user_data] => [logged_in] => Array ( [Id] => 1 [user_name] => buzz [login_time] => 22:14:54 [uid] => XYZ ) )

如何在钩子中检索ID,user_name??

【问题讨论】:

  • 这个对我来说效果很好

标签: php arrays codeigniter session


【解决方案1】:
function loginCheck()
{
    $session_userdata = $this->CI->session->userdata('logged_in');
    if($session_userdata['uid']=="XYZ")
    {
        echo "Valid User"; //it wont get inside this if
    }
}

【讨论】:

  • Bt i hv 另一个问题我如何从 Hook 更新 CI 会话数组中的用户数据??
  • $logged_in = array("uid"=>"xsss2"); $session_userdata = $this->CI->session->set_userdata('logged_in',$logged_in);
【解决方案2】:

config/hooks.php

    $hook['post_controller_constructor'][] = array(
        "class"    => "Validate_Session",
        "function" => "validate",
        "filename" => "Validate_Session.php",
        "filepath" => "hooks"
    );
  • 创建自定义库以访问 CI 会话库。

库/Authenticate.php

<?php

class Authenticate{

    var $CI;
    public function __construct()
    {
            $this->CI =& get_instance(); 
    }

    public function isSessionExists(){

        if($this->CI->session->has_userdata('key')){
            return $this->CI->session->userdata('key');
        }else{
            return false;
        }
    }
}
  • 内部钩子类构造函数加载自定义创建的库。
  • __get 魔术方法确保所有属性都可用于访问 CI 会话库。
  • validate() 方法通过自定义库的方法isSessionExists() 访问会话变量,如果会话变量不存在,该方法返回false,如果存在则返回会话变量值。

钩子/Validate_Session.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Validate_Session
{
    public function __construct()
    {
        $this->load->library('authenticate');
    }

    public function __get($property)
    {
        if ( ! property_exists(get_instance(), $property))
        {
                show_error('property: <strong>' .$property . '</strong> not exist.');
        }
        return get_instance()->$property;
    }

    public function validate()
    {
        if ( ! $this->authenticate->isSessionExists())
        {
                //redirect in login
            echo "Invalid Session";
            exit;
        }else{
            $loginUserData = $this->authenticate->isSessionExists();
            echo $loginUserData;
            exit;
        }
    }
}

【讨论】:

  • 我只是简单地更新了答案检查。如果您仍然没有得到它,请简要说明您的疑问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2016-05-28
  • 2016-07-03
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多