我正在创建一个需要登录的应用程序。用户能够登录,并且应用程序将识别用户是否输入了正确的凭证。从这里,用户将看到一个包含特定信息的仪表板。
用户输入正确的详细信息后,将执行以下代码:
$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;
答案 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');
这样可以保存一些代码,并确保首先加载会话。