卷曲不通过phpsessid

时间:2013-03-26 00:20:52

标签: php curl

尽我所能,我无法让curl传递PHPSESSID Cookie。我有类似于其他几个人描述的设置,但我无法使任何提议的解决方案有效。

我有一个向pageA.php发送获取请求的页面。 pageA.php需要来自pageB.php的一些信息,这些信息位于另一台服务器上,所以我使用的是curl。 pageB维护我需要进入和离开页面的会话状态。

我可以将其他Cookie从pageA传递到pageB,而不是PHPSESSID Cookie。

以下作品(Cookie到达pageB):
    $options[CURLOPT_COOKIE] = "myPHPSESSID=" . $sessionId;

以下内容不是:

$options[CURLOPT_COOKIE] =  "PHPSESSID=" . $sessionId;

(我构建了一个$ options数组,然后将其传递给curl_set_opt_array

事实上,后者导致我无法辨别的某种错误,因为我对curl_exec的调用永远不会返回(并且永远不会发现pageB)。

我尝试过设置标头而不是使用CURLOPT_COOKIE,但也没有成功:

$options[CURLOPT_HTTPHEADER][] = "Cookie: myPHPSESSID=" . $sessionId;

上述工作正常,但

$options[CURLOPT_HTTPHEADER][] = "Cookie: PHPSESSID=" . $sessionId;

没有。

PHP显然不希望我手动设置PHPSESSID。我不确定它是否相关,但是在页面A上我没有打电话给start_session()(尽管我尝试过这样做并且得到了相同的结果)。

我意识到我可以(可能)只将会话ID作为一个不同名称的cookie传递,并使pageB调用set_session_id()或类似的东西。但我真的想知道为什么我正在做的事情不起作用,因为我宁愿修复我做错的事情而不是创建一个解决方法。如果有帮助的话,我可以提供各种标题的转储,但我觉得这个问题已经足够长了。

...谢谢

1 个答案:

答案 0 :(得分:10)

我面临同样的问题。找到了解决方案。

在curl_exec之前调用session_write_close();

这拯救了我的生命:http://kmak.1funkybit.com/?p=126(阅读以供解释)。

示例:

<?php
session_start();
var_dump($_SESSION); //See what's in session
echo "<br>";



$c = curl_init('http://192.168.100.204/logintest/index.php?r=AccessTest/CheckAcess');
$parametros_post = 'action=verChau';
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $parametros_post);
curl_setopt($c, CURLOPT_VERBOSE, TRUE);
curl_setopt($c, CURLOPT_COOKIE, 'PHPSESSID=' . $_COOKIE['PHPSESSID']);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
session_write_close();
$page = curl_exec ($c);
echo "<br>";
echo "<br>";
echo $page;
curl_close ($c);


?>