2008-10-15 13 views
2

J'écris un client C++ qui utilise libcurl pour communiquer avec un script PHP. La communication devrait être basée sur la session, et donc la première tâche est de se connecter et de configurer le script PHP en une session.Comment gérer une simple session PHP en utilisant C++ cURL (libcurl)

Je ne suis pas habitué à travailler avec des sessions en C++ ou en PHP. Je sais essentiellement que cela a à voir avec les cookies et l'identifiant de la session de communication.

Je ne trouve aucun exemple sur la page d'accueil curl qui illustre un cas d'utilisation de gestion de session simple.

Je suppose qu'il a quelque chose à voir avec un ou plusieurs des options suivantes en boucle:

CURLOPT_COOKIE 
CURLOPT_COOKIEFILE 
CURLOPT_COOKIEJAR 
CURLOPT_COOKIESESSION 
CURLOPT_COOKIELIST 

Mais je ne peux pas vraiment voir la grande image juste de la documentation de CURLOPT_COOKIESESSION par exemple.

Quiconque a fait cela, s'il vous plaît partager un simple morceau de code qui montre le concept.

Cordialement

Robert

Répondre

3

Pour autant que je le comprends, curl gérer les cookies de session automatiquement pour vous si vous activez les cookies, aussi longtemps que vous réutilisez votre CURL pour chaque demande à la session:

CURL *Handle = curl_easy_init(); 

// Read cookies from a previous session, as stored in MyCookieFileName. 
curl_easy_setopt(Handle, CURLOPT_COOKIEFILE, MyCookieFileName); 
// Save cookies from *this* session in MyCookieFileName 
curl_easy_setopt(Handle, CURLOPT_COOKIEJAR, MyCookieFileName); 

curl_easy_setopt(Handle, CURLOPT_URL, MyLoginPageUrl); 
assert(curl_easy_perform(Handle) == CURLE_OK); 

curl_easy_setopt(Handle, CURLOPT_URL, MyActionPageUrl); 
assert(curl_easy_perform(Handle) == CURLE_OK); 

// The cookies are actually saved here. 
curl_easy_cleanup(Handle); 

Je ne suis pas positif que vous avez besoin de définir à la fois COOKIEFILE et COOKIEJAR, mais la documentation le fait apparaître comme ça. Dans tous les cas, vous devez définir l'un des deux pour activer les cookies dans CURL. Vous pouvez faire quelque chose d'aussi simple que:

curl_easy_setopt(Handle, CURLOPT_COOKIEFILE, ""); 

qui ne lire aucun cookie à partir du disque, mais il permettra des cookies de session pour la durée de la poignée boucle.

+0

C'était en effet la solution du côté C++ des choses, merci! J'ai également réussi à faire des recherches sur le sujet complexe de l'obtention du cookie d'identifiant de session PHP à renvoyer: sharkin

-1

Une session en PHP a pour but de préserver un état sur plusieurs demandes, puisque HTTP en lui-même est apatride. Pour obtenir une session de PHP, il vous suffit de demander une page php qui démarre une session et de conserver le cookie que vous récupérez pour les demandes suivantes.

Démarrer une session en PHP est simple - appelez la fonction session_start(). Cette fonction reprendra une session en cours si le cookie existe dans la requête. Lorsque la session est démarrée, les variables persistantes peuvent être définies en utilisant le tableau superglobal $ _SESSION. C'est une bonne idée de stocker un jeton 'is logged in' là =) Pour terminer la session PHP, mettez $ _SESSION à array(), afin que le jeton soit détruit.

1

J'ai un exemple de ligne de commande curl dans bash - se connectant à PHPMyAdmin puis utilisant sa fonction d'export. Peut-être qu'il vous aidera à:

#!/bin/bash 

PHPMYADMINURL="http://www.example.com/phpmyadmin/" 

# Username and password, has to be URL-encoded 
MYUSERNAME="username" 
MYPASSWORD="password" 

TMPCOOKIES="$(mktemp)" || exit 1 

TOKEN=$(
     curl \ 
       --silent \ 
       --show-error \ 
       --data @- \ 
       --data "lang=en-utf-8" \ 
       --cookie-jar "$TMPCOOKIES" \ 
       --dump-header - \ 
       --url "$PHPMYADMINURL" \ 
       <<< "pma_username=$MYUSERNAME&pma_password=$MYPASSWORD" \ 
       | egrep 'token=[0-9a-h]+' \ 
       | head -1 \ 
       | sed -r 's/^(.*token=)([0-9a-h]+)(.*)/\2/' \ 
     ) || exit 1 

curl \ 
     --cookie "$TMPCOOKIES" \ 
     --data "token=$TOKEN" \ 
     --data "export_type=server" \ 
     --data "what=sql" \ 
     --data "asfile=sendit" \ 
     --data "sql_data=something" \ 
     --data "sql_columns=something" \ 
     --data "sql_hex_for_blob=something" \ 
     --data "compression=gzip" \ 
     --url "$PHPMYADMINURL"export.php 1>&2 || exit 1 

rm -f "$TMPCOOKIES" || exit 1 

PHPMyAdmin utilise des jetons en plus des cookies de sorte que le code est un peu plus compliqué que normalement nécessaire.

+0

Malheureusement, il ne semble pas visualiser ce que j'ai besoin de savoir. Merci pour votre contribution de toute façon! – sharkin