尽我所能,我无法让curl传递PHPSESSID
cookie.我有类似于其他几个人描述的设置,但我无法使任何提议的解决方案有效.
我有一个发送get请求的页面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;
Run Code Online (Sandbox Code Playgroud)
(我构建一个$ options数组,然后将其传递给curl_set_opt_array
)
事实上,后者会导致我无法辨别的某种错误,因为我的呼唤curl_exec
永远不会返回(并且pageB
永远不会到达).
我已尝试设置标头而不是使用CURLOPT_COOKIE,但也没有成功:
$options[CURLOPT_HTTPHEADER][] = "Cookie: myPHPSESSID=" . $sessionId;
Run Code Online (Sandbox Code Playgroud)
上面的工作很好但是
$options[CURLOPT_HTTPHEADER][] = "Cookie: PHPSESSID=" . $sessionId;
Run Code Online (Sandbox Code Playgroud)
才不是.
PHP显然不希望我手动设置PHPSESSID.我不确定它是否相关,但是在任何时候我都没有打电话给我start_session()
(尽管我试过这样做并且得到了相同的结果).
我意识到我可以(可能)只是将会话ID作为一个不同名称的cookie传递,并具有pageB调用set_session_id()
或类似的东西.但我真的想知道为什么我正在做的事情不起作用,因为我宁愿修复我做错的事情而不是创建一个解决方法.如果有帮助的话,我可以提供各种标题的转储,但我觉得这个问题已经足够长了.
谢谢...
Jor*_*eFG 10
我面临着同样的问题.找到了解决方案.
呼叫session_write_close();
您的curl_exec之前.
这节省了我的生命: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);
?>
Run Code Online (Sandbox Code Playgroud)