Frage

Ich bin ein C ++ Client zu schreiben, die Libcurl verwendet, wird mit einem PHP-Skript für die Kommunikation.

sollte die Kommunikationssitzung basieren und somit die erste Aufgabe ist das PHP-Skript, eine Sitzung einzurichten um sich einzuloggen und machen.

Ich bin nicht auf der Arbeit mit Sitzungen entweder von C ++ oder PHP verwendet. Ich weiß im Grunde, dass es mit Cookies zu tun hat und Session-ID in Verbindung steht.

Ich kann kein Beispiel auf der curl Homepage, die einen einfachen Session-Management-Anwendungsfall zeigt.

Ich gehe davon hat es etwas mit einem oder mehreren der folgenden Optionen in curl zu tun:

CURLOPT_COOKIE
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIESESSION
CURLOPT_COOKIELIST

Aber ich kann wirklich nicht das große Bild sehen nur aus der Dokumentation von CURLOPT_COOKIESESSION zum Beispiel.

Jeder, der dies getan hat, bitte ein einfaches Stück Code teilen, die das Konzept zeigt.

Viele Grüße

Robert

War es hilfreich?

Lösung

Soweit ich es verstehe, ROTATION wird Session-Cookies automatisch für Sie erledigen, wenn Sie Cookies aktivieren, solange Sie für jede Anforderung in der Sitzung Ihre ROTATION Griff wiederzuverwenden:

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 );

Ich bin nicht sicher, dass Sie beide COOKIEFILE und CookieJar einstellen müssen, aber die Dokumentation macht es so zu sein scheint. Auf jeden Fall haben Sie eine der beiden, um Cookies überhaupt in CURL zu ermöglichen. Sie können so etwas wie einfach tun:

curl_easy_setopt( Handle, CURLOPT_COOKIEFILE, "" );

Das wird keine Cookies von der Festplatte gelesen, aber es wird Session-Cookies für die Dauer des curl Griff ermöglichen.

Andere Tipps

Ich habe ein Beispiel für die Kommandozeilen curl in bash - in phpMyAdmin anmelden und dann die Export-Funktion verwenden. Vielleicht wird es Ihnen helfen:

#!/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 verwendet Token neben Cookies so dass der Code ein wenig komplizierter ist, als es normalerweise erforderlich ist.

Eine Sitzung in PHP hat den Zweck, einigen Zustand über mehrere Anfragen zu erhalten, da HTTP an sich staatenlos ist. Um eine Sitzung von PHP zu bekommen, einfach eine PHP-Seite anfordern, die eine Sitzung gestartet wird, und hält den Cookie Sie für nachfolgende Anforderungen zurück.

eine Sitzung in PHP zu starten ist einfach - rufen Sie die Funktion session_start (). Diese Funktion wird eine existsing Sitzung wieder aufnehmen, wenn das Cookie in der Anfrage vorhanden ist. Wenn die Sitzung gestartet wird, können persistente Variablen mit dem superglobalen Array $ _SESSION eingestellt werden. Es ist eine gute Idee, eine ‚zu speichern protokollierte In'-Token gibt =) Um die PHP-Sitzung zu beenden, $ _SESSION auf Array () gesetzt, so dass das Token zerstört wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top