0

我在使用 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 请求触发的。问题是在第一个操作完成之前我无法访问会话命名空间。
我哪里错了?

4

1 回答 1

1

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

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

session_start之后,PHP 将获得存储在磁盘上的会话文件的独占文件锁。仅当会话数据已写入磁盘并关闭文件时,才会释放锁定。除了编写您自己的自定义会话处理程序之外,没有办法禁用此行为。

于 2012-12-13T08:45:46.423 回答