簡體   English   中英

PHP cURL沒有存儲會話cookie ...如何解決這個問題?

[英]PHP cURL isn't storing the session cookie… How to fix this?

我正在制作一個與我們公司API通信的課程......我正在使用curl發布數據並在json中檢索響應。 在代碼的最后部分(課后),我將用戶登錄到服務器(它給出了真實),但是當我嘗試再次使用curl連接時,他說我沒有登錄! 我已經完成了谷歌搜索並添加了curl_setopt($ ch,CURLOPT_COOKIE,$ this-> Session_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";
}

CURLOPT_COOKIE選項用於使用CURL發送特定cookie。 您正在尋找的選項是CURLOPT_COOKIEFILECURLOPT_COOKIEJAR ,它們指定要保存和加載cookie的文件。

所以你必須做這樣的事情:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM