Codeigniter - 会话数据不通过数组保存在数据库中

时间:2015-08-29 21:25:49

标签: php arrays codeigniter session login

当我输入我在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网站上的手册,但仍然没有解决问题的乐趣。

任何想法都是为什么会这样?或任何可能的解决方案?

2 个答案:

答案 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中可用