将变量写入会话并在另一个请求中返回

时间:2014-07-07 10:45:31

标签: php session session-variables

我正在尝试使用PHP创建进度条。基本上"主要"请求循环通过数千个项目和每个项目,它不断更新会话。另一个请求每隔几秒通过ajax返回一个会话变量。但是,我在写入会话时遇到问题,因为它在循环结束时写入了所有内容。这是代码:

// main request
$total = count($state_logs);
foreach($state_logs as $i=>$stateLog) {
    $subject = $stateLog->subject;
    $subject->processState($stateLog);
    $_SESSION['invoice_progress_current'] = $i/$total;
}
$_SESSION['invoice_progress_current'] = 1.0;

// progress request
$current = $_SESSION['invoice_progress_current'] * 100;   
echo json_encode(['current'=>$current]);

如何在每次循环迭代时写入会话?

1 个答案:

答案 0 :(得分:1)

问题很可能是因为会话文件在写入时被锁定。这就是为什么我们有session_write_close函数来表示我们已完成会话数据并且下一个请求可以继续。当然,这不符合你的情况。

在这种情况下,可能值得手动实现某些东西。例如,您可以使用会话ID作为文件名写入文件,指示进度。由于您可以控制打开和关闭文件,因此可以从中读取第二个请求而不会出现锁定问题。