当我输入我在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;
autoload.php
$autoload['libraries'] = array('database', 'session', 'form_validation');
$autoload['drivers'] = array('session');
$autoload['helper'] = array('url', 'form', 'html', 'security');
我已经检查了config.php,以确保一切设置正确并参考Codeigniters网站上的手册,但仍然没有解决问题的乐趣。
任何想法都是为什么会这样?或任何可能的解决方案?
答案 0 :(得分:3)
这里有很多问题......
目前执行时输出以下内容:
Array ( [__ci_last_regenerate] => 1440877455 [email] => jhon@gmail.com [is_logged_in] => 1 )...
数组应输出类似下面的内容,但不是:
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 )
不,不应该......你没有在任何地方设置“用户名”,剩下的就是explained in the manual。
让我们现在检查你的配置......
$config['sess_driver'] = 'files';
^这行是告诉库使用什么存储的。如果将其设置为“files”,则无法将会话保存到数据库...
$config['sess_encrypt_cookie'] = FALSE;
^此设置已过时;它在CI 3.0.x上没有任何作用。
$ config ['sess_use_database'] = TRUE;
^由于您已设置$config['sess_driver']
,因此会忽略此设置 - 将其删除。
$config['sess_table_name'] = 'ci_sessions';
^这也被忽略了,你不应该在CI3中使用它。改为设置$config['sess_save_path']
。
$config['sess_save_path'] = NULL;
^你不应该把它留给NULL。库存config.php文件中的手动和内联注释都说需要设置它!
$config['sess_match_useragent'] = FALSE;
^这在CI3中也没有任何作用。
$autoload['drivers'] = array('session');
^文档中没有任何内容暗示这一点,也没有做任何事情。
我已经检查了config.php,以确保一切设置正确并参考Codeigniters网站上的手册,但仍然没有解决问题的乐趣。
相反,你甚至没有注意最基本的文档,这些是配置文件中的简短描述......你显然只是从CodeIgniter 2.x复制粘贴你的旧设置并且没有'请关注upgrade instructions。
答案 1 :(得分:0)
以下是我建议你做的事情
$data = array(
'email' => $this->input->post('email'), // posting the email input field
'is_logged_in' => 1
);
//Use Var_dump($data) directly under the code above and add a die statement to check if the array actually contain the data as specified above
$this->session->set_userdata($data);
/*
** store the session inside a variable then var_dump it if it is really
* in there
*/
$result = $this->session->set_userdata($data);
var_dump($result);die;
请注意更改并尝试复制相同内容,以确认这些数据是否实际存储在数组中,并检查会话是否在$ result中可用