2008-10-15 4 views
2

저는 PHP 스크립트와 통신하기 위해 libcurl을 사용하는 C++ 클라이언트를 작성하고 있습니다.C++을 사용하여 간단한 PHP 세션을 관리하는 방법 (libcurl)

통신은 세션 기반이어야하므로 첫 번째 작업은 로그인하여 PHP 스크립트를 세션으로 설정하는 것입니다.

저는 C++이나 PHP에서 세션을 처리하는 데 익숙하지 않습니다. 기본적으로 쿠키와 관련이 있고 세션 ID를 전달한다는 것을 알고 있습니다.

간단한 세션 관리 사용 사례를 보여주는 curl 홈페이지에서 예제를 찾을 수 없습니다. 내가 있으리라 믿고있어

하나 컬에서 다음 옵션 중 많은 함께 할 수있는 뭔가가 있습니다

CURLOPT_COOKIE 
CURLOPT_COOKIEFILE 
CURLOPT_COOKIEJAR 
CURLOPT_COOKIESESSION 
CURLOPT_COOKIELIST 

을하지만 난 정말 그냥 예를 들어 CURLOPT_COOKIESESSION의 문서에서 큰 그림을 볼 수 없습니다.

누구나이 작업을 수행 한 사람이면 누구나 개념을 보여주는 간단한 코드를 공유하십시오.

감사

로버트

자체 HTTP가 상태이기 때문에 PHP에서 세션은 여러 요청을 통해 어떤 상태를 유지의 목적을 가지고

답변

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를 모두 설정해야한다는 점은 긍정적이지만 문서에서는 그렇게 보일 수 있습니다. 어떤 경우에도 CURL에서 쿠키를 사용하려면이 중 하나를 설정해야합니다.

이렇게하면 디스크에서 쿠키를 읽을 수는 없지만 컬링 처리 기간 동안 세션 쿠키가 활성화됩니다.

+0

이것은 실제로 C++ 측의 솔루션이었습니다. 감사합니다! 또한 PHP 세션 ID 쿠키를 다시 보내도록하는 복잡한 주제를 연구했습니다. sharkin

-1

. PHP에서 세션을 가져 오려면 세션을 시작하는 PHP 페이지를 요청하고 후속 요청을 위해 얻은 쿠키를 보관하십시오.

PHP에서 세션을 시작하는 것은 간단합니다. session_start() 함수를 호출하십시오. 이 함수는 쿠키가 요청에 존재하면 존재하는 세션을 다시 시작합니다. 세션이 시작되면, 퍼시 스턴트 변수는 슈퍼 전역 배열 $ _SESSION을 사용하여 설정할 수 있습니다. 'logged in'토큰을 저장하는 것이 좋습니다. =) PHP 세션을 종료하려면 $ _SESSION을 array()로 설정하여 토큰을 삭제하십시오.

1

필자는 PHPMyAdmin에 로그인 한 다음 내보내기 기능을 사용하여 bash에서 커맨드 라인 curl을 사용하는 예제를 제공합니다. 아마도 당신을 도울 것입니다 :

#!/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

관련 문제