2010-12-28 16 views
3

Hier ist mein Dilemma ... Ich habe im Grunde ein Skript, das mittels CURL auf einer Website von Drittanbietern eine Anmeldung durchführt und dann einen anderen Beitrag erstellt, um die Details eines Benutzers basierend auf dieser Anmeldesitzung zu aktualisieren. Jetzt, da meine Seite beschäftigt ist, habe ich mehrere Benutzer, die das gleiche tun, und es scheint, dass gelegentlich Locken verwirrt werden und eine Benutzerdetails mit einer anderen Benutzerinformation aktualisiert werden. Dies verursacht echte Probleme. Es scheint so zu sein, dass der Cookie, der von einem Benutzer nach einer Anmeldung verwendet wird, von anderen Benutzern geteilt wird und sich am selben Cookie anmeldet - was das 3rd-Party-System verwirrt. Mein Code ist unten veröffentlicht und ich muss das Cookiefile und das Cookiejar verwenden, um die PHP-Sitzung aufrechtzuerhalten, damit ich tun kann, was ich tun muss. Aber es scheint, als ob derselbe Cookie von allen Benutzern wiederverwendet wird. Macht das Sinn? Kann ich etwas tun, um das zu ändern? Bitte beraten .... Vielen Dank!php CURL - mehrere unabhängige Sitzungen - brauchen Hilfe!

Unten ist der Code i sowohl Login verwenden und veröffentlichen die gleiche cookies.txt Datei für jede Sitzung den Benutzer Update

function hitForm($postURL, $postFields, $referer="", $showerr = FALSE, $ispost = TRUE) { 
    global $islocal, $path_escape; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 

    curl_setopt($ch, CURLOPT_URL, $postURL); 
    if ($ispost) 
     curl_setopt($ch, CURLOPT_POST, 1); 
    else 
     curl_setopt($ch, CURLOPT_HTTPGET, 1); 
    curl_setopt($ch, CURLOPT_REFERER, $referer); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    $ret = curl_exec($ch); 
    if ($error = curl_error($ch)) { 
     if ($showerr) 
      echo 'ERROR: ' . $error; 
     return -1; 
     exit; 
    } 
    $CU_header = curl_getinfo($ch); 
    $CU_header["err"] = curl_errno($ch); 
    $CU_header["errmsg"] = curl_error($ch); 
    curl_close($ch); 

    $returnout = $ret; 

    //for debugging purposes for now we are logging all form posts 
    SaveLog("hitform", "F[".$this->curruserid." - ".$this->currfunc." - ".date("d-m-y h:i:s")."]".$postFields); 

    return $ret; 
} 

Antwort

2

Sie verwenden, das ist so, wo das gemeinsame Cookie Problem herkommt. Sie müssen für jede parallele Sitzung, die Sie ausführen möchten, eine separate Datei angeben.

2

Sie verwenden eine gemeinsame Cookie-JAR für alle Benutzer. Jeder Benutzer benötigt eine separate Keksdose.

0

Soweit ich das Problem verstehe, erhält Ihr Skript falsche Benutzerinformationen. Wie speichern Sie Benutzerinformationen?

Ich würde sagen, das ist die Quelle des Problems - Sie keine eindeutige Kennung, die Benutzerinformationen zuweisen, und das ist, wo es böse bekommt;)

Also, zunächst einmal möchte ich Sitzung assoziieren ID mit Benutzerinformationen (oder sagen wir Benutzerinformationen in Sitzung speichern, die für jeden einzigartig ist) und von dort laden. Und ich denke, es sollte den Trick machen;)

2

Sie müssen für jeden Benutzer verschiedene Cookie-Dateien verwenden.

ich Ihre postFields annehmen enthält einige eindeutige Kennung für jeden Benutzer (wie ein Benutzer-ID oder einem Benutzernamen), so versuchen, so etwas wie:

$cookie_file = 'cookies_' . $postFields['user_id'] . '.txt'; 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); 
+0

Dank - gibt dies einen Versuch! – Gotts