2011-05-06 113 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