php - Codeigniter - session 数据未通过数组保存在数据库中

标签 php arrays codeigniter session authentication

当我为在 Codeigniter 中开发的登录程序输入凭据时, session 似乎没有保存在 MySQL 数据库的 ci_sessions 表中。

填写表单后, session 将在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] => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c8a2a0a7a688afa5a9a1a4e6aba7a5" rel="noreferrer noopener nofollow">[email protected]</a>
   [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] => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b9d3d1d6d7f9ded4d8d0d597dad6d4" rel="noreferrer noopener nofollow">[email protected]</a>
)

配置.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 网站上的手册,但仍然没有解决问题的乐趣。

知道为什么会发生这种情况吗?或者有什么可能的解决方案吗?

最佳答案

这里有很多问题......

At the moment its outputting the following when executing:

Array
(
  [__ci_last_regenerate] => 1440877455
  [email] => [email protected]
  [is_logged_in] => 1
)

...

The array should be outputting something similar below but its not:

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] => [email protected]
)

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


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

$config['sess_driver'] = 'files';

^ 这一行告诉库要使用什么存储。如果它设置为"file",则不能期望 session 被保存到数据库中...

$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 文件中的内联注释都表明需要进行设置!

$config['sess_match_useragent'] = FALSE;

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

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

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


I have checked the config.php to ensure everything is set correctly and referred to the manual on Codeigniters website but still no joy in solving the issue.

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

关于php - Codeigniter - session 数据未通过数组保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290803/

相关文章:

codeigniter - 代码点火器中的错误 "404 Page Not Found"

php - 当提供空字符串时如何强制增加主键?

php/mysql 帮助不需要输出错误

php - 我怎样才能从 angularJS 到 phalcon php 发出完整的回发请求

java - 无法让我的对象加载器工作

php - 使用 CodeIgniter、php5 和 MySQL 在数据库上进行实时搜索

php - .htaccess 1and1.com Codeigniter

javascript - 从文件读取数据到JS时得到 "undefined"

python - numpy:将垂直数组除以其自身元素之一时出现意外结果

c - 为什么即使代码正确,该程序也会显示其他内容?