PHP cURL не хранит куки сессии ... Как это исправить? - PullRequest
3 голосов
/ 24 июня 2010

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

Кто-нибудь может подсказать мне об этом?

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

<code>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 .= "
"; вернуть $ string; выход; } / ** * $ this-> IsLogged () "Verificar se está autenticado no servidor (primeiro localmente, e depois liga ao servidor)" * * @return void * / публичная функция IsLogged () { if ($ logged) возвращает true; $ logged = $ this-> Extra_LoadSession («Login_Logged», false); если ($ запротоколированы) { вернуть истину; } Еще { // Conectar ao servidor $ dados = $ this-> API_Comunicate (array ()); если ($ Dados! == FALSE) { если (! пусто ($ Dados [ 'Auth'] [ 'вход'])) { return $ dados ['auth'] ['logged']; } Еще { вернуть ложь; } } Еще { вернуть ложь; } } } / ** * $ 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 строка пароля "Colocar aqui пароль да sua conta em www.microdual.com" * * @return void * / публичная функция 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" => $ пароль )); if ($ receive ["auth"] ["status"] && $ receive ["auth"] ["logged"]) { $ This-> Extra_SaveSession ( "Login_Logged", правда); $ this-> Login_Logged = true; вернуть истину; } Еще { вернуть ложь; } } / ** * $ this-> SMS_Send () "Executar o Login nos servidores Microdual" * * @param number string "Colocar aqui o Numberro do telemovel para enviar sms" * * @return void * / публичная функция SMS_Send ($ number, $ msg) { // Guardar apenas os цифр $ number = preg_replace ("/ [^ 0-9] /", "", $ number); $ msg = аккуратный ($ msg); $ receive = $ this-> API_Comunicate (array ( "type" => "sms", "action" => "add", "sms_to" => $ number, "sms_msg" => $ msg )); вернуть $ получить; } ################ ################ ################ ################ Iniciar variaveis da class ################ private $ Session_Prefix; private $ Session_Cookie; частный $ Geral_URLAPI; личное $ Login_Logged; ################ ################ ################ ################ Иникар Дадос да класс ################ 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 = новый Microdual (); если ($ Microdual-> Войти ( "usernamehere", "пароль")) { $ Microdual-> Debug_VarDump ($ Microdual-> SMS_Send ("93211254", "Teste Test Hi :)")); } Еще { echo "Login com erro"; }

1 Ответ

5 голосов
/ 24 июня 2010

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

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

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...