2012-06-29 20 views
7

Estoy tratando de iniciar sesión en un foro PunBB desde una página diferente en el mismo dominio usando cURL.cURL línea cookiejar comentada con #HttpOnly_?

Al iniciar sesión, se ejecuta cURL y su respuesta inicial es la página de "inicio de sesión exitoso" del foro. Sin embargo, no se configuró ninguna cookie al hacer clic en ningún enlace en ese foro, y estoy desconectado.

Después de investigar un poco mi archivo cookiejar menciona la cookie necesaria para iniciar sesión. Si creo esta cookie y su valor manualmente en mi navegador, estoy conectado con éxito y todo está bien. Entonces, el valor de la cookie almacenado es correcto.

Sin embargo, la línea que contiene mi nombre/valor de cookie en el cookiejar está comentada.

primera pregunta: ¿Por qué? segundo: cómo prevenir ese comportamiento?

Aquí es mi 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 

Y es mi decisión rizo aquí:

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; 

Respuesta

5

El prefijo #Httponly_ en una línea no es un comentario. Es una cadena mágica para decirle al navegador/cliente que la cookie en cuestión es httponly. curl lo entenderá y lo tratará en consecuencia.

No entiendo la parte sobre hacer clic en las cosas ya que no veo cómo eso está relacionado o es relevante para su programa de uso de curl.

+0

Ah Okay! Gracias Daniel. Parece que malinterpreté por completo el significado del hash. Tu comentario acerca de no entender la parte que hace clic. Bueno, aunque la cookie se escribe correctamente en el cookiejar, no se establece como una cookie normal en el navegador. Entonces, la página de respuesta inicial me dice que estoy conectado correctamente, pero dado que la cookie no está allí, realmente no es lo que se vuelve dolorosamente obvio cuando hago clic en cualquier enlace del foro (me dirá que no he iniciado sesión). ¿Alguna idea sobre eso? – Amelia

+1

Sí, Curl es el cliente y obtiene y usa las cookies, no significa que lo envíe al navegador o incluso que usted puede enviarlo al navegador que solo está viendo los resultados del programa Curl. –

+0

Ya veo. Bien. Así que escribí un poco de ditty para tomar la cookie correcta y tener php configurado :) La vida es buena. Gracias por su ayuda Daniel! – Amelia