我的申请中存在很大问题。在$ CI-> session-> userdata中插入的第一页不会更新数据库,但Active Record的更新方法返回1(或true)。因此,我的会话在第一次没有记录在数据库中,但是第二次尝试记录了。
我对CI_Session类中的方法sess_write()进行了测试,选择Active Record记录当前会话的记录。 Active Record显示的结果与更新的结果相同,但是当我使用PHPmyadmin检查数据库时,ci_session表中此会话的记录未升级。
例:
function sess_write()
{
//Previous userdata: array(x:'abc')
...
$this->CI->db->where('session_id', $this->userdata['session_id']);
$this->CI->db->update($this->sess_table_name, array('last_activity' => $this->userdata['last_activity'], 'user_data' => $custom_userdata));
//Was updated array(x:'abc', y:'123')
echo "<pre>";
$result = $this->CI->db->query('SELECT * FROM (`ci_sessions`) WHERE `session_id` = "' . $this->userdata['session_id'] . '"', false, true);
$result = $result->result_array();
echo "Resultado Query=";
print_r($result[0]['user_data']);
//Was printed array(x:'abc', y:'123')
echo "</pre>";
...
//In ci_session in database was shown array(x:'abc'). Should be array(x:'abc', y:'123').
}
更新
function sess_write(){
...
$this->CI->db->query('SELECT * FROM (`ci_sessions`) WHERE `session_id` = "' . $this->userdata['session_id'] . '"', false, true);
$result->result_array();
sleep(1); // I have inserted this sleep for tests, and the problem was gone.
$this->_set_cookie($cookie_userdata);
}
对于测试,我插入了一个睡眠(1);在sess_write()函数中的session()之后,系统完美地更新了会话。
哪个可能与此有关?我可以使用哪种可能的解决方案?