2008-10-15 2 views
2

Я пишу клиент C++, который использует libcurl для связи с PHP-скриптом.Как управлять простой сессией PHP с использованием C++ cURL (libcurl)

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

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

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

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

CURLOPT_COOKIE 
CURLOPT_COOKIEFILE 
CURLOPT_COOKIEJAR 
CURLOPT_COOKIESESSION 
CURLOPT_COOKIELIST 

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

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

С уважением

Роберт

ответ

3

Насколько я понимаю, CURL будет обрабатывать сессионные куки автоматически для вас, если вы включите куки, до тех пор, как вы повторно использовать 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, ""); 

Это не будет читать любые куки с диска, но это позволит куки сессии на протяжении завитка ручки.

+0

Это действительно решение на стороне С ++, спасибо! Мне также удалось исследовать сложную тему получения возвращаемого файла cookie PHP-сессии: sharkin 2008-10-15 16:43:05

-1

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

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

1

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

+0

К сожалению, это не похоже на то, что мне нужно знать. Спасибо за ваш вклад! – sharkin 2008-10-15 12:02:18

Смежные вопросы