簡體   English   中英

PHP-維護跨curl請求的會話

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM