2013-03-26 42 views
5

Hãy thử làm như tôi có thể, tôi không thể cuộn tròn để chuyển cookie PHPSESSID. Tôi có một thiết lập tương tự như những gì người khác đã mô tả, nhưng tôi đã không thể có được bất kỳ giải pháp được đề xuất làm việc.curl không chuyển qua phpsessid

Tôi có một trang gửi yêu cầu nhận đến pageA.php. pageA.php cần một số thông tin từ pageB.php, trên máy chủ khác, vì vậy tôi đang sử dụng curl. pageB duy trì trạng thái phiên mà tôi cần để truy cập và từ trang của tôi.

Tôi có thể chuyển các cookie khác từ pageA đến pageB, không chỉ là cookie PHPSESSID.

Các công trình sau đây (một cookie đến trên pageB):
$options[CURLOPT_COOKIE] = "myPHPSESSID=" . $sessionId;

Sau đây không:

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

(tôi xây dựng một mảng $ tùy chọn và sau đó vượt qua nó để curl_set_opt_array)

Trong thực tế, sau này gây ra một số loại lỗi mà tôi không thể phân biệt, như cuộc gọi của tôi đến curl_exec không bao giờ trả về (và pageB không bao giờ đạt được).

tôi đã cố gắng thiết lập các tiêu đề thay vì sử dụng CURLOPT_COOKIE, nhưng cũng không thành công:

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

các công trình trên chỉ phạt tiền nhưng

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

không.

Rõ ràng là PHP không muốn tôi đặt PHPSESSID theo cách thủ công. Tôi không chắc chắn nếu nó có liên quan, nhưng không có thời gian trên trang Tôi có gọi start_session() (mặc dù tôi đã cố gắng làm như vậy và có kết quả tương tự).

Tôi nhận ra rằng tôi có thể (có thể) chỉ chuyển id phiên dưới dạng cookie được đặt tên khác và có trangB gọi set_session_id() hoặc nội dung tương tự. Nhưng tôi thực sự muốn biết tại sao những gì tôi đang làm không hoạt động, vì tôi muốn sửa chữa những gì tôi đang làm sai hơn là tạo ra một giải pháp thay thế. Tôi có thể cung cấp một số bãi của các tiêu đề khác nhau đang ping xung quanh nếu đó là hữu ích, nhưng tôi con số câu hỏi này là đủ dài cho bây giờ.

Cảm ơn ...

Trả lời

8

Tôi đang gặp phải vấn đề tương tự. Tìm ra giải pháp.

Gọi session_write_close(); trước curl_exec của bạn.

Điều này đã cứu mạng sống của tôi: http://kmak.1funkybit.com/?p=126 (đọc giải thích).

Ví dụ:

<?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

nhờ, mặc dù tôi thấy lời khuyên này và thử nó vô ích. Trang của tôi không bao giờ gọi 'start_session();', do đó 'session_write_close();' dường như không có bất kỳ hiệu ứng nào. –

+0

Hmmmm nhưng bạn nhận được $ sessionID nếu bạn không bắt đầu bất kỳ phiên nào? Bạn có thể vượt qua PHPSESSID với curl, bởi vì tôi đang làm điều đó với Yii và kịch bản thuần túy. Tôi đã cập nhật bài đăng của mình bằng tập lệnh. – JorgeeFG

+1

Ồ - xin lỗi vì không rõ ràng. '$ SessionId' đến từ trình duyệt máy khách. Trang php của tôi sử dụng curl chỉ là một proxy để giải quyết các vấn đề về tên miền chéo, vì vậy nó không duy trì trạng thái phiên nào. Tôi đã đọc '$ sessionId' từ' $ _COOKIE' đi kèm với mỗi yêu cầu từ máy khách đến trang proxy. –

Các vấn đề liên quan