首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeIgniter -在数据库中存储会话时使用FlashData

问CodeIgniter -在数据库中存储会话时使用FlashData
EN

Stack Overflow用户
提问于 2012-11-23 21:48:01
回答 1查看 939关注 0票数 1

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

代码语言:javascript
复制
$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错误)。

我现在有了一个新的bug,我认为这与我的代码有关,但我不知道如何修复它。

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

代码语言:javascript
复制
$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。当我不使用第二个连接时,它可以正常工作。有什么想法吗?有些人说不要在DB中存储会话,但为了安全起见,我需要这样做。

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

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

更新3:在使用log_message之后(在SESS_WRITE(在log_message/库/会话文件中的函数)中,我看到它正确地设置了消息,但是还有一个额外的刷新.

代码语言:javascript
复制
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。

代码语言:javascript
复制
$this->db1 = $this->load->database('db1', TRUE);

因此,当使用多个连接时,fix...although而不是fun...is将手动加载所有数据库。

代码语言:javascript
复制
$this->db = $this->load->database('default', TRUE);
$this->db1 = $this->load->database('db1', TRUE);

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-24 19:04:44

你是如何建立数据库连接的?config/autoload库是否包含“数据库”?那就把它移开。手动执行数据库连接。如果您需要同时连接多个数据库,您可以这样做:$emp = $this->load-> database ('emp',TRUE);$dil =$this->load-> guide/database/connecting.html (‘dil’,TRUE);然后以$emp->guide/database/connecting.html()的方式访问数据库函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13536101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档