Session第一次在方法sess_write()中没有更新

时间:2014-01-27 19:07:20

标签: php mysql codeigniter session activerecord

我的申请中存在很大问题。在$ 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()之后,系统完美地更新了会话。

哪个可能与此有关?我可以使用哪种可能的解决方案?

0 个答案:

没有答案