我在 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);
谢谢!