2010-03-11 6 views
19

comment pouvons-nous maintenir session cURL? J'ai un code qui envoie les détails de connexion d'un site et se connecte avec succès J'ai besoin de maintenir la session sur le site pour continuer.comment maintenir session cURL en php?

ici est mon code utilisé pour se connecter au site en utilisant cURL

<?php 
     $socket = curl_init(); 
     curl_setopt($socket, CURLOPT_URL, "http://www.XXXXXXX.com"); 
    curl_setopt($socket, CURLOPT_REFERER, "http://www.XXXXXXX.com"); 
    curl_setopt($socket, CURLOPT_POST, true); 
    curl_setopt($socket, CURLOPT_USERAGENT, $agent); 
    curl_setopt($socket, CURLOPT_POSTFIELDS, "form_logusername=XXXXX&form_logpassword=XXXXX"); 
    curl_setopt($socket, CURLOPT_COOKIESESSION, true); 
    curl_setopt($socket, CURLOPT_COOKIEJAR, "cookies.txt"); 
    curl_setopt($socket, CURLOPT_COOKIEFILE, "cookies.txt"); 
    $data = curl_exec($socket); 
    curl_close($socket); 
    ?> 

Répondre

2

Puisque vous faites référence à un fichier cookies.txt sans aucune référence à un dossier de ma première supposition serait que vous êtes essayer d'écrire dans un fichier qui n'est pas accessible en écriture. Donc, vérifiez d'abord si vous trouvez réellement un fichier cookies.txt et s'il contient le cookie (s) de session que vous attendez.

+0

Merci pour la relecture rapide le dossier contenant le fichier cookies.txt et il est writble avec des autorisations 777 –

+0

Est-ce vide? Curl traite les cookies de session comme non expirés. Sinon, essayez de le tronquer en premier. Aussi, vous devez définir CURLOPT_FOLLOWLOCATION pour vous assurer que vous avez terminé la connexion – symcbean

0

je ne serais probablement déplacer ce code dans une fonction. Après une connexion réussie, vous avez maintenant la session associée au cookie que vous avez dans votre fichier cookie.txt. Pour les demandes suivantes, continuez à utiliser ce fichier cookie et vous devriez avoir une session valide sur ce site.

11

Voici la meilleure façon que j'ai trouvé à faire link:

le soufflet texte est une version « remixé » du contenu du blogpost:

$useragent = $_SERVER['HTTP_USER_AGENT']; 
$strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/'; 

session_write_close(); 

$ch = curl_init(); 
$ch = curl_init($rssFeedLink); 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_USERAGENT, $useragent); 
curl_setopt($ch, CURLOPT_COOKIE, $strCookie); 

$response = curl_exec($ch); 
curl_close($ch); 

Qu'est-session_write_close() faire? Il termine la session en cours et stocke les données de session. Apparemment, PHP n'aime pas quand plusieurs scripts jouent avec la session, donc, il le verrouille. Mettre session_write_close s'assure que votre session courante est stockée ainsi vous pouvez le récupérer et l'employer.

si vous n'utilisez pas session_write_close() un nouvel identifiant de session sera généré au lieu d'utiliser l'identifiant de session courant.

Egalement PHPSESSID doit être remplacé par le nom de la variable de session. Selon OWSAP recommandations il devrait être quelque chose de plus général comme anid.

Parfois, vous aurez besoin d'envoyer un agent utilisateur avec le message donc j'inclus le paramètre CURLOPT_USERAGENT.

8

Voici comment vous avez cURL avec des séances

//initial request with login data 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php'); 
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=XXXXX&password=XXXXX"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name'); //could be empty, but cause problems on some hosts 
curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/ip4.x/file/tmp'); //could be empty, but cause problems on some hosts 
$answer = curl_exec($ch); 
if (curl_error($ch)) { 
    echo curl_error($ch); 
} 

//another request preserving the session 

curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/profile'); 
curl_setopt($ch, CURLOPT_POST, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, ""); 
$answer = curl_exec($ch); 
if (curl_error($ch)) { 
    echo curl_error($ch); 
} 

Je l'ai vu ceci sur impresspages