2012-06-29 7 views
7

Ich versuche mich in einem PunBB Forum von einer anderen Seite auf der gleichen Domain mit cURL einzuloggen.cURL cookiejar Zeile mit #HttpOnly_ auskommentiert?

Beim Anmelden wird cURL ausgeführt und die erste Antwort ist die Seite "Erfolgreiche Anmeldung" des Forums. Es wurde jedoch kein Cookie gesetzt, wenn ich auf einen Link in diesem Forum klicke, und ich bin ausgeloggt.

Nach ein wenig Nachforschung erwähnt meine Cookiejar-Datei den Cookie, der benötigt wird, um sich einzuloggen. Wenn ich diesen Cookie und seinen Wert manuell in meinem Browser erstelle, bin ich erfolgreich eingeloggt und alles ist gut. Also ist der gespeicherte Cookie-Wert korrekt.

Die Zeile mit meinem Cookie-Namen/Wert im Cookiejar ist jedoch auskommentiert.

erste Frage: Warum? Sekunde: Wie man dieses Verhalten verhindert?

Hier ist meine cookiejar:

# Netscape HTTP Cookie File 
# http://curl.haxx.se/rfc/cookie_spec.html 
# This file was generated by libcurl! Edit at your own risk. 

www.example.com FALSE / FALSE 0 PHPSESSID 3d7oe6vt3blv3vs3ea94nljcs7 
#HttpOnly_www.example.com FALSE / FALSE 1340974408 forum_cookie_e19209 MnwyYWQ4OGViNDI2NjE5MWEwMGZiNGZkNDFmZDY5ZDZhYjM5OTA5NDVjfDEzNDA5NzQ0MDh8OTU0NTExOGZhNWNlNGY5OGMzZDk3MmE0NDlmMWRjNzM3ZjI1NzMxOA%3D%3D 

Und hier ist mein curl Aufruf:

function forumLogin() { 
    $loginFields = array('req_username' => $_REQUEST['username'] 
         ,'req_password' => $_REQUEST['password'] 
         ,'form_sent' => "1" 
        ); //and so on 
    $login = getUrl('http://www.example.com/manager/forum/login.php', 'post', $loginFields); 
    return $login; 
} 

function getUrl($url, $method='', $vars='') 
{ 
    $ch = curl_init(); 
    if ($method == 'post') { 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); 
    $buffer = curl_exec($ch); 
    curl_close($ch); 
    return $buffer; 
} 

// successful login so reset fail count and update key values 
if(isset($_SESSION['mgrValidated'])) { 
    $sql = "update $dbase.`".$table_prefix."user_attributes` SET failedlogincount=0, logincount=logincount+1, lastlogin=thislogin, thislogin=".time().", sessionid='$currentsessionid' where internalKey=$internalKey"; 
    $rs = mysql_query($sql); 
    var_dump(forumLogin()); 
} 
exit; 

Antwort

5

Die #Httponly_ Präfix auf einer Linie ist kein Kommentar. Es ist eine magische Zeichenfolge, um dem Browser/Client zu sagen, dass der betreffende Cookie ein httponly ist. Curl wird das verstehen und dementsprechend damit umgehen.

Ich verstehe nicht den Teil über das Klicken auf Dinge, da ich nicht sehe, wie das für Ihr Programm zur Verwendung von Curl verwandt oder relevant ist.

+0

Ah Okay! Danke Daniel. Scheint so, als hätte ich die Bedeutung des Hashes völlig falsch interpretiert. Ihr Kommentar zu den Klick-Teil nicht zu verstehen. Nun, obwohl der Cookie im cookiejar richtig geschrieben wird, wird er im Browser nicht als normaler Cookie gesetzt. Die erste Seite sagt mir, dass ich korrekt angemeldet bin, aber da der Cookie nicht da ist, bin ich wirklich nicht, was schmerzhaft offensichtlich wird, wenn ich auf einen Link im Forum klicke (es wird mir sagen, dass ich nicht eingeloggt bin). Irgendwelche Gedanken dazu? – Amelia

+1

Ja, curl ist der Client und ruft die Cookies auf und verwendet sie, das heißt nicht, dass er sie an den Browser sendet oder dass Sie ihn an den Browser senden können, der nur die Ergebnisse des curl-Programms überwacht. –

+0

Ich sehe. Alles klar. Also habe ich ein kleines Liedchen geschrieben, um das richtige Cookie zu holen und es php einstellen zu lassen :) Das Leben ist gut. Danke für Ihre Hilfe Daniel! – Amelia

Verwandte Themen