1

我在 CI 上的配置非常标准。

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = TRUE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 2000;

我不使用 expire 因为我正在测试系统,我知道这不是一个好习惯。我使用高 sess_time_to_update 因为 AJAX 请求破坏了会话(一个 CI 错误)。

我现在有一个新错误,我认为这与我的代码有关,但我不确定如何修复它。

我一直在使用一个数据库连接将会话存储在数据库中。显示错误消息的 flashdata 一直运行良好.. 直到最近。现在,当我引入第二个数据库连接时,不会设置 flashdata。

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'emp';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

$db['dil']['hostname'] = 'localhost';
$db['dil']['username'] = 'root';
$db['dil']['password'] = '';
$db['dil']['database'] = 'dil';
$db['dil']['dbdriver'] = 'mysql';
$db['dil']['dbprefix'] = '';
$db['dil']['pconnect'] = TRUE;
$db['dil']['db_debug'] = TRUE;
$db['dil']['cache_on'] = FALSE;
$db['dil']['cachedir'] = '';
$db['dil']['char_set'] = 'utf8';
$db['dil']['dbcollat'] = 'utf8_general_ci';
$db['dil']['swap_pre'] = '';
$db['dil']['autoinit'] = TRUE;
$db['dil']['stricton'] = FALSE;

在我设置我的闪存数据后,我用 var_dump 和 print_r 显示它,它打印一个布尔值:false。当我不使用第二个连接时,它工作正常。有任何想法吗?有人说不要在数据库中存储会话,但我需要安全。

更新:我假设 set_flashdata 没有将它插入数据库,所以我检查以确定这就是问题所在。set_flashdata 没有插入闪存数据。具有两个连接的其他页面工作正常(通知)只是这个页面不是。

更新 2:当我设置 flashdata 并退出时;在我查看数据库后,出现一条消息:“您需要登录才能看到此页面”。这是在有人未登录时设置的。嗯..肯定发生了一些奇怪的事情......

更新 3:在 Core/libraries/session 文件中的 SESS_WRITE( 函数中使用 log_message(

ERROR - 2012-11-23 15:38:39 --> "logged_in";b:1;}
ERROR - 2012-11-23 15:38:39 -->"logged_in";b:1;s:22:"flash:new:notification";a:2:{s:4:"type";s:7:"success";s:7:"message";s:31:"Image was updated successfully.";}}

解决感谢mohan.gade 我找到了解决方案。

当使用我设置的方式(默认、db1、db2 等)处理多个数据库时,当您将新数据库加载到变量中时,当您自动加载默认数据库时,它会重置 $this->db。

$this->db1 = $this->load->database('db1', TRUE);

所以修复......虽然不好玩......是在使用多个连接时手动加载所有数据库。

$this->db = $this->load->database('default', TRUE);
$this->db1 = $this->load->database('db1', TRUE);

谢谢!

4

1 回答 1

1

你如何建立数据库连接?配置/自动加载库是否包含“数据库”?然后删除它。手动进行数据库连接。如果你需要同时连接多个数据库,你可以这样做: $emp = $this->load->database('emp', TRUE); $dil = $this->load->database('dil', TRUE); 并按照 $emp->query(); 的方式访问数据库函数;安装常规方法 $this->db->query() 了解更多详细信息,请访问http://codeigniter.com/user_guide/database/connecting.html

于 2012-11-24T19:04:44.387 回答