2010-06-24 6 views
3

Я делаю класс для общения с нашей компанией API ... Я использую curl для публикации данных и получения ответа в json. В последней части кода (после класса) я регистрирую пользователя на сервере (он дает истину), но когда я пытаюсь подключиться снова с завитом, он говорит, что я не зарегистрирован! Я уже сделал поиск Google и добавил curl_setopt ($ ch, CURLOPT_COOKIE, $ this-> Session_Cookie); линия.PHP cURL не хранит файл cookie сеанса ... Как это исправить?

Может ли кто-нибудь дать мне свет на это?

Заранее спасибо;)

if(!class_exists("Microdual")) { 
class Microdual{ 

    // No caso de a sessão não estar iniciada, iniciar aqui a sessão 


    ################ 
    ################ 
    ################ 
    ################ Iniciar funcoes privadas ################ 

    private function Extra_LoadSession($varname,$otherwise){ 
    return (!empty($_SESSION[$this->Session_Prefix . $varname])) ? $_SESSION[$this->Session_Prefix . $varname] : $otherwise; 
    } 
    private function Extra_SaveSession($varname,$value){ 
    $_SESSION[$this->Session_Prefix . $varname] = $value; 
    return true; 
    } 

    /** 
    * $this->API_Comunicate() "Comunicar comandos com os servidores Microdual (enviar e receber)" 
    * 
    * @param data array "Colocar as variaveis que deseja passar à plataforma (Ver Lista completa de variaveis no Inicio)" 
    * 
    * @return array or void (false) 
    */ 
    private function API_Comunicate($_data){ 

    // Converter o array em string (serialize) 
    $data = array();  
    while(list($n,$v) = each($_data)){ 
    $data[] = "$n=$v"; 
    } 
    $data = implode('&', $data); 
    // format --> test1=a&test2=b etc. 

    $ch = curl_init(); 
    curl_setopt($ch,CURLOPT_URL,$this->Geral_URLAPI); 
    curl_setopt($ch,CURLOPT_POST,count($_data)); 
    curl_setopt($ch,CURLOPT_COOKIE,$this->Session_Cookie); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$data); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    $content = curl_exec($ch); 
    curl_close($ch); 

    if(($content !== false) && (!empty($content))){ 
    return json_decode($content, true); 
    }else{ 
    return false; 
    } 
    } 


    ################ 
    ################ 
    ################ 
    ################ Iniciar funcoes Públicas ################ 

    public function Debug_VarDump($varname){ 
    $string = "<pre>"; 
    $string .= var_dump($varname); 
    $string .= "</pre>"; 
    return $string; 
    exit; 
    } 
    /** 
    * $this->IsLogged() "Verificar se está autenticado no servidor (primeiro localmente, e depois liga ao servidor)" 
    * 
    * @return void 
    */ 
    public function IsLogged(){ 
    if($logged) return true; 
    $logged = $this->Extra_LoadSession("Login_Logged",false); 
    if($logged){ 
    return true; 
    }else{ 
    // Conectar ao servidor 
    $dados = $this->API_Comunicate(array()); 
    if($dados!==false){ 
    if(!empty($dados['auth']['logged'])){ 
     return $dados['auth']['logged']; 
    }else{ 
     return false; 
    } 
    }else{ 
    return false; 
    } 
    } 
    } 

    /** 
    * $this->Login() "Executar o Login nos servidores Microdual" 
    * 
    * @param username string "Colocar aqui o nome de utilizador da sua conta em www.microdual.com" 
    * @param password string "Colocar aqui a password da sua conta em www.microdual.com" 
    * 
    * @return void 
    */ 
    public function Login($username,$password){ 
    if(empty($username) || empty($password)) return false; 
    if($this->IsLogged()) return true; 

    $receive = $this->API_Comunicate(array(
    "type" => "auth", 
    "action" => "add", 
    "auth_username" => $username, 
    "auth_password" => $password 
    )); 

    if($receive["auth"]["status"] && $receive["auth"]["logged"]){ 
    $this->Extra_SaveSession("Login_Logged",true); 
    $this->Login_Logged = true; 
    return true; 
    }else{ 
    return false; 
    } 
    } 
    /** 
    * $this->SMS_Send() "Executar o Login nos servidores Microdual" 
    * 
    * @param number string "Colocar aqui o numero do telemovel para enviar sms" 
    * 
    * @return void 
    */ 
    public function SMS_Send($number,$msg){ 
    // Guardar apenas os numeros 
    $number = preg_replace("/[^0-9]/", "", $number); 
    $msg = trim($msg); 

    $receive = $this->API_Comunicate(array(
    "type" => "sms", 
    "action" => "add", 
    "sms_to" => $number, 
    "sms_msg" => $msg 
    )); 
    return $receive; 
    } 

    ################ 
    ################ 
    ################ 
    ################ Iniciar variaveis da class ################ 

    private $Session_Prefix; 
    private $Session_Cookie; 
    private $Geral_URLAPI; 
    private $Login_Logged; 




    ################ 
    ################ 
    ################ 
    ################ Iniciar dados da class ################ 

    function __construct(){ 
    $this->Session_Prefix = "MYCMSAPI_"; 
    $this->Session_Cookie = "PHPSESSID=".$_COOKIE['PHPSESSID']."; path=/"; 
    $this->Geral_URLAPI = "http://www.MYCOMPANY.com/MyapiURL"; 
    $this->Login_Logged = $this->Extra_LoadSession("Login_Logged",false); 
    } 
} 
} 

$Microdual = new Microdual(); 
if($Microdual->Login("usernamehere","password")){ 
$Microdual->Debug_VarDump($Microdual->SMS_Send("93211254","Teste Test Hi :)")); 
}else{ 
echo "Login com erro"; 
} 

ответ

5

Опция CURLOPT_COOKIE для отправки конкретных куков с помощью CURL. Параметры, которые вы ищете, - CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR, в которых указывается файл для сохранения и загрузки файла cookie.

Таким образом, вы должны сделать что-то вроде этого:

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); 
+0

это не сработало! это файл, помещенный в ту же папку скрипта? – CuSS

+0

Как это работает? Значение параметра - это просто путь к тому, где вы хотите сохранить свои файлы cookie. Всякий раз, когда вы хотите использовать эти файлы cookie, вам просто нужно использовать такой файл. PHP создаст его, если он еще не существует. –

+0

Я уже пробовал здесь CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE. Но теперь он работает, CURLOPT_COOKIESESSION был правдой, и он вызывал новую сессию cookie в каждом коннекторе. Спасибо ;) – CuSS

Смежные вопросы