php - curl 不传递 phpsessid

标签 php curl

尽我所能,我无法让 curl 传递 PHPSESSID cookie。我的设置与其他几个人所描述的设置类似,但我无法使任何建议的解决方案发挥作用。

我有一个页面向 pageA.php 发送获取请求。 pageA.php 需要来自位于另一台服务器上的 pageB.php 的一些信息,因此我正在使用 curl。 pageB 维护我需要进出我的页面的 session 状态。

我可以将其他 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)。

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

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

上面的工作正常但是

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

没有。

PHP 显然不希望我手动设置 PHPSESSID。我不确定它是否相关,但我从未在 pageA 上调用 start_session()(尽管我尝试这样做并得到了相同的结果)。

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

谢谢...

最佳答案

在 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);


?>

关于php - curl 不传递 phpsessid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627217/

相关文章:

php - 我们如何将 jquery 日期选择器放入 chrome 扩展中

xml - Tomcat 上的 Solr 无法发布没有错误字段未知的 xml 文件

php - 如何刷新 php curl 的 dns 缓存?

google-chrome - Curl 有效但 Postman 无效

php - 从我的站点登录到 gmail

出现未声明的 Php 函数

php - 如何集中处理php错误和异常

php - 来自 Paypal 的 Laravel 5.1 csrftoken curl

php - Laravel Fortify 验证错误不起作用

php 变量包含字符串和替换