在Codeigniter中检索会话数据

时间:2014-10-08 11:35:06

标签: php codeigniter session login frameworks

我正在创建一个需要登录的应用程序。用户能够登录,并且应用程序将识别用户是否输入了正确的凭证。从这里,用户将看到一个包含特定信息的仪表板。

用户输入正确的详细信息后,将执行以下代码:

$this->load->library('session');
$this->session->set_userdata('logged_in', true);
redirect('dashboard', 'refresh');

应用程序会将用户定向到正确的位置,其中包含以下代码:

$this->load->library('session');
print_r($this->session->all_userdata());

这将显示标准会话信息(session_id,ip_address等),但不显示我存储的数据。

如何解决此问题,以便可以在每个页面上访问此会话数据?

非常感谢任何帮助。

修改

以下是config.php中会话/ cookie的当前设置:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;
$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;

3 个答案:

答案 0 :(得分:2)

当您登录控制器时,如果您使用的是CodeIgniter 2,则需要在数据库上设置会话:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = TRUE; // Change FALSE TO TRUE
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

配置/ autoload.php

$autoload['libraries'] = array(
    'database',
    'session'
);

在config / config.php中,输入您自己的encryption_key

$config['encryption_key'] = 'FN3ig7JhmCeE9mWFc1BOetIt603qcr81';

登录

public function index() {
    $this->load->library('form_validation');
    $this->form_validation->set_rules('username', 'Username', 'required');
    $this->form_validation->set_rules('password', 'Password', 'required');

    if ($this->form_validation->run() == FALSE) {
        $this->load->view('common/login_view');
    }
    else {
        $set_userdata = array(
            'is_logged' => true,
            'username' => $this->input->post('username')
        );
        $this->session->set_userdata($set_userdata);
        redirect('success_page');
    }
}

在控制器的父级部分。

<?php
    class dashboard extends CI_Controller {
        public function __construct() {
            parent::__construct();
            if ($this->session->userdata('is_logged') == FALSE) {
                redirect('your error page or login');
            }
        }

        public function index() {

        }
    }

查看信息中心

<pre>
    <?php print_r($this->session->all_userdata()); ?>
</pre>

Single
<?php echo $this->session->userdata('username'); ?>

我建议现在使用CodeIgniter 3,http://www.codeigniter.com/

另一个选择是你可以创建一个core / MY_Controller.php文件:

class MY_Controller extends CI_Controller {

    public function __construct() {

        parent::__construct();
        if ($this->session->userdata('is_logged') == FALSE) {
            redirect('your error page or login');
        }
    }
}

然后扩展您需要启用会话的控制器:

<?php
    class dashboard extends MY_Controller {
        public function __construct() {
            parent::__construct();
        }

        public function index() {

        }
    }

答案 1 :(得分:0)

在会话中设置数据:

$this->load->library('session');
$this->session->set_userdata('logged_in', true);
redirect('dashboard', 'refresh');

对于打印数据$this->session->userdata

$this->load->library('session');
print_r($this->session->userdata); // For all userdata sessions
echo $this->session->userdata('logged_in'); // For a single value in a session with a key

答案 2 :(得分:0)

CodeIgniter会话工作;这是另一个问题。 在config / config.php 中,

更改

$config['sess_cookie_name']     = 'ci_session';

$config['sess_cookie_name']     = 'cisession';

$config['sess_cookie_name']     = 'chocolatechipsinyourcookies';

重点是消除cookie名称中的下划线。它可能会导致问题。

现在,在文件config / autoload.php中,在第56行附近,自动加载会话和数据库

$autoload['libraries'] = array('database', 'session');

这样可以保存一些代码,并确保首先加载会话。