2008-10-31 43 views

回答

6

我不完全明白爲什麼發生這種情況,但我解決了它。

這個bug描述了我遇到的同樣的問題。我有一個腳本發佈到另一個腳本,都使用相同的會話,這顯然阻止PHP。

因此,在執行整個捲曲後處理腳本之前,我會調用session_commit函數,以便結束調用腳本會話並啓用被調用腳本以重新啓動會話。

捶......

9

從PHP手冊後,您的腳本終止,而無需調用session_write_close(

http://php.net/manual/en/function.session-write-close.php

的會話數據通常存儲),但作爲會話數據被鎖定爲了防止併發寫入,只有一個腳本可以在任何時候在會話上運行。將幀集與會話一起使用時,由於此鎖定,您將體驗逐幀加載的幀。只要完成對會話變量的所有更改,就可以通過結束會話來縮短加載所有幀所需的時間。

所以你不能有2個腳本在同一時間使用相同的會話。

2

我也被這個咬傷了。我解決了它,感謝在stackoverflow中提供的信息。

我有兩個頁面,都在頂部有「session_start()」,第一個用curl調用第二個頁面,所以我可以在驗證後將變量POST到第二個腳本。網絡服務器掛起來,直到我添加「session_write_close()」。

代碼示例如下:

// IMPORTANT (OR ELSE INFINITE LOOP) - close current sessions or the next page will wait FOREVER for a write lock. 
session_write_close(); 

// We can't use GET because we can't display the password in the URL. 
$host = $_SERVER['HTTP_HOST']; 
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$url = "http://$host$uri/formPage2.php?"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); //append URL 
curl_setopt($ch, CURLOPT_POST,TRUE);//We are using method POST 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_REQUEST, '', "&"));//append parameters  

curl_exec($ch); // results will be outputted to the browser directly 
curl_close($ch); 
exit(); 
相關問題