2011-05-06 115 views
1

我在瀏覽器上得到一個錯誤說:PHP捲曲,錯誤:瀏覽器必須支持會話cookie?

HTTP/1.1 500內部服務器錯誤日期:週五,2011 GMT 20時25分28秒服務器05月06日:IBM_HTTP_Server/6.0.2.43的Apache/2.0.47( Unix)$ WSEP:Set-Cookie:JSESSIONID = 0000HpGRXpuwrdY_u0k-ecHKAFK:14ekdcv70;路徑= /連接:關閉傳輸編碼:分塊內容類型:text/html; charset = ISO-8859-1內容語言:錯誤500:瀏覽器必須支持會話cookie。

如何解決這個問題?

這裏我所做的:

session_start(); 

$postData = http_build_query($_GET); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "\BuiltinObjectToken-VerisignClass3PublicPrimaryCertificationAuthority.crt"); 
    curl_setopt($ch, CURLOPT_URL, "https://zzzzzz.zzzzz.co.uk/zzz/zzzz/" . $form_link); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postDataCapcha); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookiefile"); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookiefile"); 
    curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id()); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $PagaeCapcha = curl_exec($ch); 

exit($PagaeCapcha); 

回答

1
Set-Cookie: JSESSIONID=0000HpGRXpuwrdY_u0k-ecHKAFK:14ekdcv70; Path=/ 

這是響應標頭,其最初設置一個會話cookie。這個不會存儲在你的cookiefile罐子裏。這是一個臨時餅乾,你扔掉它。

您將不得不首先發出指向例如主頁。然後纔將實際的數據請求發送到所需的端點/ zzz/zzzz /。

+0

你的意思是它應該是這樣的例子:curl_setopt($ ch,CURLOPT_COOKIEJAR,「0000HpGRXpuwrdY_u0k-ecHKAFK:14ekdcv70」);如果不是,你能舉個例子嗎? – user622378 2011-05-06 20:54:15

+0

不,那不是我的意思。但是總結一下更好:只需調用'curl_exec()'兩次。 – mario 2011-05-06 20:55:45

1

問題是,你發送你的PHP的副本創建的會話的名稱。這幾乎肯定不是.co.uk服務器創建的會話的名稱。所以它看到,因爲你的「瀏覽器」不支持cookie,它會嘗試設置一個名爲'JSESSIONSID'的會話cookie,但是你發回一個名爲'PHP_SESSID'的cookie(或其他)。

+0

哦,我明白了,那麼我需要做些什麼來解決它呢?在標題響應中,它說「JSESSIONID」與它有什麼關係? – user622378 2011-05-06 20:47:46

+0

您需要捕獲其他服務器發送給您的cookie,並逐字回傳。您可能需要將請求分成兩個階段 - 一個是最初獲取會話cookie,然後是實際請求來獲取所需的數據。 – 2011-05-06 20:49:34