【问题标题】:Codeigniter - Session data not saving in database via arrayCodeigniter - 会话数据未通过数组保存在数据库中
【发布时间】: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_loggedis_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


【解决方案1】:

这里有很多问题...

目前执行时输出如下:

大批 ( [__ci_last_regenerate] => 1440877455 [电子邮件] => jhon@gmail.com [is_logged_in] => 1 )

...

数组应该在下面输出类似的东西,但不是:

大批 ( [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 [用户数据] => [用户名] => Jhon [电子邮件] => jhon@gmail.com )

不,不应该……你没有在任何地方设置“用户名”,其余的是explained in the manual


现在让我们检查您的配置...

$config['sess_driver'] = '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。 stock config.php 文件中的手册和内联 cmets 都说设置这是必需的!

$config['sess_match_useragent'] = FALSE;

^ 这在 CI3 中也没有任何作用。

$autoload['drivers'] = array('session');

^ 文档中没有任何内容表明这一点,它什么也不做。


我检查了 config.php 以确保一切设置正确,并参考了 Codeigniters 网站上的手册,但仍然没有解决问题。

相反,您甚至没有注意最基本的文档,这些文档是配置文件中的简短描述......您显然只是从 CodeIgniter 2.x 复制粘贴了旧设置并且没有不要关注upgrade instructions

【讨论】:

    【解决方案2】:

    我会建议你这样做

    $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 中可用

    【讨论】:

    • 当我使用上面的代码调试数组时,我得到以下信息:array(2) { ["email"]=> string(24) "jhon@gmail.com" ["is_logged_in"] => int(1) },目前它似乎没有将会话保存在数据库中。
    • 您是否将会话配置为保存在数据库中?
    • 是的,我在我的帖子中看到了 config.php
    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多