[英]Guzzle hangs Apache when passing PHPSESSID session cookie
我在一個PHP腳本中使用Guzzle get請求來獲取另一個。
$guzzle->get("urltomysecondpage")->getBody();
但是,Guzzle不知道會話ID cookie,因此我的目標腳本無法訪問會話變量。
文檔指出,我要做的只是將“ cookies”設置為“ true”,並且Guzzle將使用調用腳本看到的相同cookie集。
$guzzle->get("urltomysecondpage", ['cookies' => TRUE])->getBody();
但是,這根本行不通。 目標腳本看不到cookie。 文檔還允許顯式設置Cookie數組,如下所示:
$guzzle->get("urltomysecondpage", ['cookies' => ['PHPSESSID'=>$_COOKIE['PHPSESSID']]])->getBody();
它有效,但是如果我指定其中一個cookie具有鍵“ PHPSESSID”,則無效。 如果這樣做,Apache服務器將完全掛起。 不僅當前請求,而且它也停止響應所有請求。
這是怎么回事?
使用cookies => true
選項時遇到一些麻煩。 您是否嘗試提供默認的CooieJar
?
例:
$jar = new GuzzleHttp\Cookie\CookieJar();
$default = [
"cookies" => $jar
];
$c = new GuzzleHttp\Client(["defaults" => $default]);
現在,默認情況下,該客戶端的每個請求都設置了相同的Cookie罐。
網絡服務器無法為2個請求打開相同的會話。 要解決此問題,您可以先關閉會話,然后在通過Guzzle提出請求后重新打開該會話。
例:
session_start();
$sessionId = session_id();
session_write_close();
$client = new Client(
array(
'base_uri' => 'http://www.yoursite.tld',
'cookies' => false,
)
);
$cookie = new GuzzleHttp\Cookie\SetCookie();
$cookie->setName('PHPSESSID');
$cookie->setValue($sessionId);
$cookie->setDomain('www.yoursite.tld');
$cookieJar = new CookieJar(
false,
array(
$cookie,
)
);
$response = $client->request(
'GET',
'/urltomysecondpage',
array(
'cookies' => $cookieJar,
)
);
session_start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.