CakePHP数据库会话处理程序和反应式编程

时间:2016-01-20 15:48:49

标签: php session cakephp reactive-programming reactphp

请查看以下代码:

public function step1 (){
    $this->Session->write('test.test', 1);
    sleep(10);

}

public function step2 () {
    if($this->Session->read('test.test')){
        $this->response->body('Great');
    }else{
        $this->response->body('Fail');
    }
}

public function remove () {
    $this->Session->delete('test.test');
}

如果执行step1操作,则休眠5秒,然后执行step2,结果为“Fail”。这意味着在我调用write方法时不会持久化会话变量。

如果你看一下CakePHP DatabaseSession类,你可以找到:

public function write($id, $data) {
    if (!$id) {
        return false;
    }
    $expires = time() + $this->_timeout;
    $record = compact('id', 'data', 'expires');
    $record[$this->_model->primaryKey] = $id;
    return $this->_model->save($record);
}

这只是问题的一个例子。我在浏览器中使用了带有CakePHP和EventSource的ReactPHP。当您发送请求时,PHP会在脚本完成之前多次向浏览器发送信息。如果用户单击第二步并且第一步尚未完成,则step2会抛出错误,因为它无法读取会话变量。

我认为PHP只会在执行session_write_close时持续存在会话。

register_shutdown_function('session_write_close');// CakeSession.php

我该如何解决这个问题?

是否可以在脚本完成之前保存会话?

0 个答案:

没有答案