【问题标题】:CodeIgniter - Using FlashData WITH Sessions Stored in databaseCodeIgniter - 将 FlashData 与存储在数据库中的会话一起使用
【发布时间】:2012-11-12 05:35:23
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: php codeigniter session


    【解决方案1】:

    如何建立数据库连接?配置/自动加载库是否包含“数据库”?然后删除它。手动进行数据库连接。 如果您需要同时连接到多个数据库,您可以这样做: $emp = $this->load->database('emp', TRUE); $dil = $this->load->database('dil', TRUE); 并通过以下方式访问数据库功能 $emp->查询(); 插入常规方法 $this->db->query() 更多详情请至http://codeigniter.com/user_guide/database/connecting.html

    【讨论】:

    • 经过几天的调试,这似乎是问题所在。我会将其标记为已回答,并在底部的问题中给出一个简短的解决方案。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多