我在使用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请求触发的。问题是,在第一个操作完成之前,我无法访问会话命名空间 我哪里错了?
答案 0 :(得分:1)
问题是在第一个操作完成之前我无法访问会话命名空间。我哪里错了?
你不是。这是使用默认“文件”handler的PHP会话的预期行为。
在session_start
时,PHP将在磁盘上存储的会话文件中获得exclusive file lock。仅当会话数据已写入磁盘且文件已关闭时,才会释放锁定。除了编写自己的自定义会话处理程序之外,无法禁用此行为。