2013-03-26 1 views
5

시도해 보니 나는 PHPSESSID 쿠키를 넘길 수 없습니다. 몇 가지 다른 설명이있는 것과 비슷한 설정이 있지만 제안 된 솔루션 중 하나를 작동시키지 못했습니다.curl not passing phpsessid

pageA.php에게 요청을 보내는 페이지가 있습니다. pageA.php에는 다른 서버에있는 pageB.php의 정보가 필요하므로 컬을 사용하고 있습니다. pageB은 내 페이지로 들어가야하는 세션 상태를 유지합니다.

다른 쿠키를 pageA에서 으로 전달할 수 있으며 PHPSESSID 쿠키가 아닙니다.

다음 작품

은 (쿠키는 pageB에 도착) 다음
$options[CURLOPT_COOKIE] = "myPHPSESSID=" . $sessionId;

을 다음하지 않는 :

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

(I은 $ 옵션 배열을 구축하고 curl_set_opt_array에 전달)

사실, 후자는 내 전화가 curl_exec으로 반환되지 않으므로 분별할 수없는 일종의 오류가 발생합니다 (및 pageB에 도달하지 않습니다).

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

위의 작품을 잘하지만

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

하지 않습니다 :

나는 또한없는 성공, 헤더를 설정하는 대신 CURLOPT_COOKIE를 사용하여 시도했습니다.

PHP는 필자가 PHPSESSID를 수동으로 설정하는 것을 원치 않습니다. 관련성이 있는지는 잘 모르겠지만 페이지 A에 대해서는 아무런 답변이 없지만 start_session()으로 전화를 걸겠습니다.

나는 아마도 (아마) 다른 이름의 쿠키로 세션 ID를 전달하고 012B또는 비슷한 것을 호출 할 수 있음을 알고 있습니다. 그러나 나는 정말로 내가하고있는 일이 왜 작동하지 않는지 알고 싶다. 나는 오히려 해결 방법을 만드는 것보다 잘못하고있는 것을 고쳐야한다. 도움이된다면 핑 소리가 나고있는 여러 헤더의 일부 덤프를 제공 할 수 있지만이 질문은 현재 충분히 길다는 것을 알 수 있습니다.

감사합니다 ...

답변

8

저는 같은 문제에 직면하고 있습니다. 솔루션을 찾았습니다.

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


?> 
+0

덕분에, 나는이 조언을보고 아무 소용이 그것을 시도하지만. 내 페이지는'start_session();'을 결코 호출하지 않으므로'session_write_close();'는 아무런 효과가없는 것처럼 보입니다. –

+0

Hmmmm하지만 세션을 시작하지 않으면 $ sessionID가 어디서 나옵니까? 내가 Yii와 평범한 스크립트로하고 있기 때문에 PHPSESSID를 곱슬 곱슬하게 전달할 수 있습니다. 내 게시물을 스크립트로 업데이트했습니다. – JorgeeFG

+1

아 - 불분명하게해서 죄송합니다. '$ sessionId'는 클라이언트 브라우저에서옵니다. 컬을 사용하는 PHP 페이지는 도메인 간 문제를 해결하기위한 프록시 일 뿐이므로 어떤 세션 상태도 유지하지 않습니다. 클라이언트로부터 프록시 페이지로의 각 요청에 수반되는'$ _COOKIE'에서'$ sessionId'를 읽습니다. –