[英]php - maintain session across curl requests
我可以使用以下代碼在我的curl請求創建的過程中使用我的當前會話-
$query = http_build_query(array(
"pcode"=>strtolower($code)
));
$url = $_SERVER['REQUEST_SCHEME'].":".PUBLIC_ROOT."xyz.php"."?".$query;
session_write_close();
$curl = curl_init($url);
$useragent = $_SERVER['HTTP_USER_AGENT'];
$strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_GET, true);
curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
curl_setopt($curl, CURLOPT_COOKIE, $strCookie );
$json_response = curl_exec($curl);
curl_close($curl);
對於以上代碼,我使用了以下答案-https: //stackoverflow.com/a/15374966/815929
現在的問題是,在新進程中(由curl請求創建),我需要設置一些會話變量。 但是,這些會話變量不會在curl_close()
之后的調用過程中反映出來。
我的調用腳本中有一些會話變量。 我可以在curl請求啟動的新過程中使用這些會話變量。 這個新過程還設置了一些新的會話變量。 但是,當我們返回到調用過程時,這些新的會話變量不會得到反映。
我是否需要設置其他卷曲選項才能完成這項工作?
我正在努力想象它是如何運行的。
但是,這些會話變量在curl_close()之后不會反映在調用過程中
如果使用默認會話處理程序,則第二個腳本應該只是超時,如果它是從...調用的。
session_start();
...
curl_exec(); // at this point session file is still locked
...
[session_close();]
$ strCookie ='PHPSESSID ='。 $ _COOKIE ['PHPSESSID']。 “; 路徑= /';
是嗎? 您沒有在HTTP請求中指定Cookie的路徑(在響應中)。 這將告訴腳本客戶端具有名為“ path”的cookie。
真的應該是...
$ strCookie = session_name()。 “ =”。 SESSION_ID();
但是,這些會話變量在curl_close()之后不會反映在調用過程中
您是否從存儲中重新加載了會話? (另請參見有關會話文件鎖定的先前說明)。 您的代碼應該做類似...。
session_start();
...
session_close();
...
curl_exec();
...
session_start();
最好切換到非阻塞處理程序 ,或者最好不要通過會話傳遞狀態-將數據發布到第二個腳本以從輸出流中讀取響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.