2013-03-26 8 views
5

जितना संभव हो मैं कोशिश करता हूं, मैं PHPSESSID कुकी पास करने के लिए कर्ल प्राप्त करने में असमर्थ हूं। मेरे पास कई अन्य लोगों द्वारा वर्णित एक समान सेटअप है, लेकिन मैं प्रस्तावित समाधानों में से कोई भी काम नहीं कर पाया है।कर्ल पास नहीं हो रहा है phpsessid

मेरे पास एक पृष्ठ है जो pageA.php पर अनुरोध प्राप्त करता है। pageA.php को pageB.php से कुछ जानकारी की आवश्यकता है, जो कि किसी अन्य सर्वर पर है, इसलिए मैं कर्ल का उपयोग कर रहा हूं। pageB सत्र स्थिति को बनाए रखता है कि मुझे अपने पृष्ठ से और जाने की आवश्यकता है।

मैं, pageB को pageA से अन्य कुकीज़ पारित करने के लिए बस नहीं PHPSESSID कुकी सक्षम हूँ।

निम्नलिखित काम करता है (एक कुकी pageB पर आता है):
$options[CURLOPT_COOKIE] = "myPHPSESSID=" . $sessionId;

निम्नलिखित नहीं करता है:

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

(मैं एक $ विकल्प सरणी का निर्माण और फिर इसे curl_set_opt_array के पास)

वास्तव में, बाद में किसी प्रकार की त्रुटि का कारण बनता है जिसे मैं समझने में असमर्थ हूं, क्योंकि curl_exec पर मेरा कॉल कभी नहीं लौटाता है (और pageB कभी नहीं पहुंचा है)।

मैं हेडर स्थापित करने के बजाय CURLOPT_COOKIE का उपयोग कर की कोशिश की है, लेकिन यह भी कोई सफलता के साथ:

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

ऊपर काम करता है ठीक है, लेकिन

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

नहीं करता है।

PHP स्पष्ट रूप से नहीं चाहता कि मैं मैन्युअल रूप से PHPSESSID सेट करूं। मुझे यकीन नहीं है कि यह प्रासंगिक है, लेकिन पेज पर कभी भी नहीं, क्या मैं start_session() पर कॉल करता हूं (हालांकि मैंने ऐसा करने की कोशिश की और उसी परिणाम भी थे)।

मुझे एहसास है कि मैं (शायद) सत्र आईडी को अलग-अलग नाम वाली कुकी के रूप में पास कर सकता हूं और पेज बी कॉल set_session_id() या कुछ समान है। लेकिन मैं वास्तव में जानना चाहता हूं कि मैं जो कर रहा हूं वह काम नहीं कर रहा है, क्योंकि मैं कामकाज बनाने से गलत काम कर रहा हूं। मैं विभिन्न शीर्षकों के कुछ डंप प्रदान कर सकता हूं जो कि उपयोगी होने पर चारों ओर पिंग कर रहे हैं, लेकिन मुझे लगता है कि यह प्रश्न अब तक काफी लंबा है।

धन्यवाद ...

उत्तर

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

हम्मम्म लेकिन यदि आप कोई सत्र शुरू नहीं करते हैं तो आपको $ सत्र आईडी कहाँ मिलती है? आप कर्ल के साथ PHPSESSID पास कर सकते हैं, क्योंकि मैं इसे वाईआई और सादे स्क्रिप्ट के साथ कर रहा हूं। मैंने अपनी पोस्ट को स्क्रिप्ट के साथ अपडेट किया है। – JorgeeFG

+1

ओह - अस्पष्ट होने के लिए खेद है। '$ SessionId' क्लाइंट ब्राउज़र से आ रहा है। मेरा PHP पृष्ठ जो curl का उपयोग करता है, क्रॉस-डोमेन समस्याओं को प्राप्त करने के लिए केवल एक प्रॉक्सी है, इसलिए यह किसी भी सत्र स्थिति को बनाए रखता नहीं है। मैंने '$ _COOKIE' से' $ sessionId' पढ़ा है जो ग्राहक से प्रॉक्सी पृष्ठ पर प्रत्येक अनुरोध के साथ आता है। –

संबंधित मुद्दे