会话被阻止

时间:2012-12-13 07:55:21

标签: php ajax zend-framework

我在使用PHP会话时遇到了麻烦。

我使用AJAX向应用程序中的操作发送请求,该操作仅用于触发进程的启动。其进度存储在会话变量中 问题是我无法从第一个操作中访问此变量,直到第一个操作完成 像这样:

public function startWorkingAction() {  
$namespace = new Zend_Session_Namespace('progressOfWork');  
$namespace->totalItems = 0;   
$namespace->processedItems = 0;  
//... processing items  
$namespace->totalItems = $itemCount;   
foreach($items as $item) {  
//process a single item  
$namespace->processedItems++;  
}  
}

到目前为止,我还有另一项行动来检查进展情况:

public function checkProgressAction() {  
$namespace = new Zend_Session_Namespace('progressOfWork');  
echo json_encode(array(  
'total' => $namespace->totalItems,  
'processed' => $namespace->processedItems  
));  
}

这两个操作都是通过AJAX请求触发的。问题是,在第一个操作完成之前,我无法访问会话命名空间 我哪里错了?

1 个答案:

答案 0 :(得分:1)

  

问题是在第一个操作完成之前我无法访问会话命名空间。我哪里错了?

你不是。这是使用默认“文件”handler的PHP会话的预期行为。

session_start时,PHP将在磁盘上存储的会话文件中获得exclusive file lock。仅当会话数据已写入磁盘且文件已关闭时,才会释放锁定。除了编写自己的自定义会话处理程序之外,无法禁用此行为。