【发布时间】:2015-08-29 21:25:48
【问题描述】:
当我为在 Codeigniter 中开发的登录程序输入凭据时,会话似乎没有保存在 MySQL 数据库的 ci_sessions 表中。
填写完表格后,会在controller.php中设置会话(示例代码如下):
if ($this->form_validation->run()) {
$data = array(
'email' => $this->input->post('email'), // posting the email input field
'is_logged_in' => 1
);
$this->session->set_userdata($data);
redirect('main/members');
} else {
$this->load->view('login');
}
目前执行时输出如下:
Array
(
[__ci_last_regenerate] => 1440877455
[email] => jhon@gmail.com
[is_logged_in] => 1
)
输出使用view.php中的以下代码
print_r($this->session->all_userdata());
数组应该在下面输出类似的东西,但不是:
Array
(
[session_id] => dd7e0e2266da6481ef45faaa7e3c808b
[ip_address] => 127.0.0.1
[user_agent] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
[last_activity] => 1387619782
[user_data] =>
[username] => Jhon
[email] => jhon@gmail.com
)
config.php:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
自动加载.php
$autoload['libraries'] = array('database', 'session', 'form_validation');
$autoload['drivers'] = array('session');
$autoload['helper'] = array('url', 'form', 'html', 'security');
我检查了 config.php 以确保一切设置正确,并参考了 Codeigniters 网站上的手册,但仍然没有解决问题。
知道为什么会这样吗?或任何可能的解决方案?
【问题讨论】:
-
输出点你有
is_logged和is_logged_in属性。第一个设置在哪里? -
@Tpoika - 我目前正在使用数组中设置的“is_logged_in”。
-
您是否尝试过从下面的答案中调试建议?
-
@Tpoika - 我得到以下信息:'array(2) { ["email"]=> string(24) "jhon@gmail.com" ["is_logged_in"]=> int (1) }' 它似乎没有保存到数据库中。我检查了 autoload.php、config.php 和 database.php,似乎都配置正确。
-
如果您使用数据库方法进行会话,则它已经在 db 中。你只需打印出来。
标签: php arrays codeigniter session login