CodeIgniter - 将FlashData与会话一起使用存储在数据库中

时间:2012-11-23 21:48:02

标签: php codeigniter session

我对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;

我没有使用过期,因为我正在测试系统,我知道这不是好习惯。我使用高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;

设置我的flash数据后,我用var_dump和print_r显示它,然后输出一个boolean:false。当我不使用第二个连接时它工作正常。有任何想法吗?有些人说没有在DB中存储会话,但我需要保证安全。

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

更新2:当我设置flashdata并退出时;在我查看数据库之后,有一条消息:“你需要登录才能看到这个页面”。这是在有人没有登录的情况下设置的。嗯..绝对是奇怪的事情......

使用log_message之后

更新3:(在SESS_WRITE中(Core / libraries / session文件中的函数)我看到它正确设置了消息但是还有一些额外的刷新方法。

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);

谢谢!

1 个答案:

答案 0 :(得分:1)

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