Как управлять простой сессией PHP с использованием C ++ cURL (libcurl)

Я пишу клиент C ++, который использует libcurl для общения с PHP-скриптом.

Сообщение должно быть основано на сеансе, и, следовательно, первая задача – войти в систему и сделать скрипт PHP настроенным сеансом.

Я не привык работать с сеансами либо с C ++, либо с PHP. Я в основном знаю, что это связано с куки-файлами и сообщением идентификатора сеанса.

Я не могу найти ни одного примера на домашней странице curl, которая демонстрирует простой пример использования сеанса.

Я предполагаю, что это имеет какое-то отношение к одному или нескольким из следующих вариантов в curl:

CURLOPT_COOKIE CURLOPT_COOKIEFILE CURLOPT_COOKIEJAR CURLOPT_COOKIESESSION CURLOPT_COOKIELIST 

Но я не могу увидеть большую картину только из документации CURLOPT_COOKIESESSION, например.

Любой, кто сделал это, поделитесь простым фрагментом кода, который показывает концепцию.

С уважением

Роберт

Solutions Collecting From Web of "Как управлять простой сессией PHP с использованием C ++ cURL (libcurl)"

Насколько я понимаю, CURL автоматически обрабатывает файлы cookie cookie, если вы включаете файлы cookie, если вы повторно используете свой CURL-дескриптор для каждого запроса в сеансе:

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

Я не уверен, что вам нужно установить оба COOKIEFILE и COOKIEJAR, но в документации это кажется таким. В любом случае вы должны установить один из двух, чтобы включить файлы cookie вообще в CURL. Вы можете сделать что-то простое:

 curl_easy_setopt( Handle, CURLOPT_COOKIEFILE, "" ); 

Это не будет читать файлы cookie с диска, но он будет включать куки сессии в течение всего ручка завитка.

У меня есть пример для зависания командной строки в bash – вход в PHPMyAdmin, а затем использование его функции экспорта. Может быть, это поможет вам:

 #!/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 использует токены помимо файлов cookie, поэтому код немного сложнее, чем обычно требуется.

Сессия в PHP имеет целью сохранить некоторое состояние по нескольким запросам, поскольку HTTP сам по себе не имеет апатридов. Чтобы получить сеанс с PHP, просто попросите PHP-страницу, которая запускает сеанс, и сохраните файл cookie, который вы получите для последующих запросов.

Запуск сеанса в php прост – вызовите функцию session_start (). Эта функция возобновит существующий сеанс, если файл cookie существует в запросе. Когда сеанс запущен, постоянные переменные могут быть установлены с использованием суперглобального массива $ _SESSION. Это хорошая идея, чтобы сохранить 'logged in'-token there =) Чтобы завершить сеанс PHP, установите $ _SESSION в array (), чтобы токен был уничтожен.