Php codeigniter检查所有控制器中的会话错误

Php codeigniter检查所有控制器中的会话错误,php,codeigniter,Php,Codeigniter,我使用下面的代码检查用户是否登录 if(!$this->session->userdata['logged_in']) { redirect("gt_login"); } else { } 但这段代码只在localhost中工作,而我将其放入服务器时,它显示如下错误 这是我加载会话库的地方 function __construct() { parent::__construct(); $this->load->lib

我使用下面的代码检查用户是否登录

if(!$this->session->userdata['logged_in'])
    {

    redirect("gt_login");
    }
    else
    {

    }
但这段代码只在localhost中工作,而我将其放入服务器时,它显示如下错误

这是我加载会话库的地方

function __construct() { parent::__construct(); $this->load->library('session'); $this->load->database(); $this->load->helper('url'); $this->load->helper('form'); $this->load->model('gt_home_content_model'); if(!$this->session->userdata['logged_in']) { redirect("gt_login"); } else { } }
我对codeigniter不太熟悉,还有没有其他方法可以这样做?有人能建议我这样做吗?

像这样尝试一下


您的问题是使用
[]
访问会话变量<代码>[]用于访问数组元素。会话变量不能是数组

如果要验证会话值是否存在,请使用
$this->session->has_userdata('some_name')


请在使用前加载会话库。在autoload.php中

$autoload['libraries'] = array('session');
之后,您可以在控制器视图和模型中使用会话方法

$this->session->set_userdata('logged_in','Nishant');// set session data
$this->session->userdata('logged_in'); // using session data

验证成功后,必须在登录控制器中设置会话数据。比如:

$this->session->set_userdata('logged_in', TRUE);
然后可以在构造函数中调用它。


<?php 

after loding session library
$this->load->library('session');


you can set the session like this in login your login controller 

class Login_controller extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('login_model');
    }

    public function userLogged() {
        if ($this->session->userdata('logged_in')) {
            $session_data = $this->session->userdata('logged_in');
            $sdata=array();
            $sdata['name'] = $session_data['name'];
            $this->session->set_userdata($sdata);
            redirect('admin_controller/index');          
        } else {
            //If no session, redirect to login page
            redirect('login_controller/index', 'refresh');
        }
    }
}

now you can check user is logged in or not 
in another controller look like this code 

<?php  class Another_controller extends CI_Controller{
    public function __construct() {
        parent::__construct();
        if (!$this->session->userdata('logged_in')) {
            redirect('login_controller/index');
        }
    }
}

?>

这是我正在使用的登录控制器

public function user_login_process()
{

    $this->form_validation->set_rules('username', 'username', 'trim|required');
    $this->form_validation->set_rules('password', 'password', 'trim|required');


if ($this->form_validation->run() == false)
{

redirect('LoginController/index');
} 
else
{
    $data = array('username' => $this->input->post('username'),'password' => md5($this->input->post('password')));
    $result = $this->gt_login_model->login($data);
    if ($result == true)
    {
        $username = $this->input->post('username');
        $result = $this->gt_login_model->read_user_information($username);
        if ($result != false) 
        {
        $session_data = array('username' => $result[0]->user_name);
        // Add user data in session
        $this->session->set_userdata('logged_in', $session_data);
        $this->load->view('admin/intropage');
        }
    } 
    else
    {
    $data = array('error_message' => 'Invalid Username or Password');
    $this->load->view('admin/login/login_dashboard', $data);
    }
}
}
set user\u login\u过程类似于此函数
公共函数userLoginCheck(){
$this->load->library('form_validation');
$this->form_validation->set_规则('email'、'email'、'trim | required | xss_clean');
$this->form_validation->set_rules('password','password','trim | required | xss|u clean | callback|u check_database');
如果($this->form\u validation->run()==FALSE){
$sdata=array();
$sdata['error']='Invalid Email或Password';
$this->session->set_userdata($sdata);
重定向(“登录控制器/索引”);
}否则{
//去私人区域
重定向('login_controller/userLogged','refresh');
}
}

[]
用于访问数组元素。是否加载了会话库。您在哪里设置了logged_in会话变量?@soorajspillai:您应该将该代码添加到您的问题中。@Hikmat:我不明白,现在试试看它会起作用。
如果(!$this->session->has_userdata['logged_in']['username'])
试试,希望它能起作用。请参阅编辑后的答案。您好,还需要帮助吗?不,我解决了这个问题。是的,我已经设置了所有这些,并且我使用了这些方法。您仍然面临这个问题吗?您正在使用[]访问会话变量。它应该是()作为它的和函数。是的,我仍然被这个问题困扰着,现在我使用()访问会话变量use
if($this->session->userdata('logged_in')=='')
我发布了我的登录控制器,你能检查一下吗请在你的登录控制器中加载会话库
public function user_login_process()
{

    $this->form_validation->set_rules('username', 'username', 'trim|required');
    $this->form_validation->set_rules('password', 'password', 'trim|required');


if ($this->form_validation->run() == false)
{

redirect('LoginController/index');
} 
else
{
    $data = array('username' => $this->input->post('username'),'password' => md5($this->input->post('password')));
    $result = $this->gt_login_model->login($data);
    if ($result == true)
    {
        $username = $this->input->post('username');
        $result = $this->gt_login_model->read_user_information($username);
        if ($result != false) 
        {
        $session_data = array('username' => $result[0]->user_name);
        // Add user data in session
        $this->session->set_userdata('logged_in', $session_data);
        $this->load->view('admin/intropage');
        }
    } 
    else
    {
    $data = array('error_message' => 'Invalid Username or Password');
    $this->load->view('admin/login/login_dashboard', $data);
    }
}
}
set user_login_process look like this function


 public function userLoginCheck() {
    $this->load->library('form_validation');
    $this->form_validation->set_rules('email', 'email', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'password', 'trim|required|xss_clean|callback_check_database');
    if ($this->form_validation->run() == FALSE) {
        $sdata = array();
        $sdata['error'] = '<font color="red">Invalid Email or Password </font>';
        $this->session->set_userdata($sdata);
        redirect("login_controller/index");
    } else {
            //Go to private area
        redirect('login_controller/userLogged', 'refresh');
    }
}