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 に答える