如何在具有多个数据库的CodeIgniter中存储数据库会话?

时间:2011-08-18 08:36:39

标签: php session codeigniter

我正在使用codeigniter并且直到约会我使用基于cookie的会话..但现在会话的大小增加所以我需要将它们存储在数据库中..

我有多个数据库(超过3个)连接到我的应用程序。我如何专门使用ci_sessions表来存储会话?

当我说$ config ['sess_use_database'] = TRUE时;我的应用程序空白。显示平面白页。

这是因为从多个数据库连接中,codeigniter找不到确切的数据库来存储会话..

我怎样才能达到同样的目标? 感谢

2 个答案:

答案 0 :(得分:3)

自问这个问题以来已经有一段时间了,但我觉得需要一个确凿的答案。

截至CodeIgniter 2.1.2

加载system/libraries/Session.php时,如果指定,它还会加载要与会话一起使用的数据库。

使用的默认代码是(第85行):

// Are we using a database?  If so, load it
if ($this->sess_use_database === TRUE AND $this->sess_table_name != '')
{
    $this->CI->load->database();
}

理论上,这应该加载默认数据库。出于某种原因,这对我不起作用。我不得不修改代码以专门调用默认数据库。

您应该用来从default数据库中提取的代码:

// Are we using a database?  If so, load it
if ($this->sess_use_database === TRUE AND $this->sess_table_name != '')
{
    $this->CI->load->database('default', TRUE);
}

如果您想使用其他数据库,只需将default更改为您要使用的数据库名称。

注意:如果在调用会话数据之前加载另一个数据库,则需要再次指定会话数据。会话将继续尝试从当前活动的数据库中提取。

答案 1 :(得分:2)

查看来自system/libraries/Session.php的会话代码,可以看到它使用默认的$this->db连接到数据库以存储会话。

尝试修改数据库组,使$this->db正常工作。或者,您可以扩展Session.php,以便可以将数据库组传递给它以存储会话。

希望这能让你开始朝着正确的方向前进。