簡體   English   中英

傳遞PHPSESSID會話cookie時,Guzzle掛起Apache

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

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