문제

PHP 스크립트와 통신하기 위해 libcurl을 사용하는 C ++ 클라이언트를 작성하고 있습니다.

커뮤니케이션은 세션 기반이어야하므로 첫 번째 작업은 로그인하고 PHP 스크립트가 세션을 설정하는 것입니다.

C ++ 또는 PHP의 세션 작업에 익숙하지 않습니다. 나는 기본적으로 그것이 쿠키 및 전달 세션 ID와 관련이 있다는 것을 알고 있습니다.

CURL 홈페이지에서 간단한 세션 관리 사용 사례를 보여주는 예제를 찾을 수 없습니다.

Curl에서 다음 옵션 중 하나 또는 많은 옵션과 관련이 있다고 가정합니다.

CURLOPT_COOKIE
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIESESSION
CURLOPT_COOKIELIST

그러나 예를 들어 Curlopt_cookiesession의 문서화에서 큰 그림을 볼 수는 없습니다.

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

문안 인사

로버트

도움이 되었습니까?

해결책

내가 이해하는 한, 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_easy_setopt( Handle, CURLOPT_COOKIEFILE, "" );

디스크의 쿠키는 읽지 않지만 컬 핸들의 지속 시간 동안 세션 쿠키를 사용할 수 있습니다.

다른 팁

Bash의 Command Line Curl에 대한 예제가 있습니다. 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은 쿠키 외에 토큰을 사용하므로 코드는 일반적으로 필요한 것보다 조금 더 복잡합니다.

HTTP 자체가 상태가 없기 때문에 PHP의 세션은 여러 요청에 걸쳐 일부 상태를 보존 할 목적이 있습니다. PHP에서 세션을 얻으려면 세션을 시작하는 PHP 페이지를 요청하고 후속 요청을 위해 쿠키를 다시 받으십시오.

PHP에서 세션을 시작하는 것은 간단합니다 - session_start () 함수를 호출하십시오. 쿠키가 요청에 존재하는 경우 해당 기능은 존재하는 세션을 재개합니다. 세션이 시작되면 Superglobal Array $ _session을 사용하여 영구 변수를 설정할 수 있습니다. 'token in'token in'-token =)을 저장하는 것이 좋은 생각입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top