C ++ cURL(libcurl)を使用して簡単なPHPセッションを管理する方法
質問
PHPスクリプトとの通信にlibcurlを使用しているC ++クライアントを作成しています。
通信はセッションベースである必要があります。したがって、最初のタスクはログインし、PHPスクリプトでセッションを設定することです。
私は、C ++またはPHPのセッションの操作に慣れていません。基本的には、Cookieと通信セッションIDに関係していることを知っています。
簡単なセッション管理のユースケースを示す例がcurlホームページに見つかりません。
curlの以下のオプションの1つまたは多くと関係があると思います:
CURLOPT_COOKIE
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIESESSION
CURLOPT_COOKIELIST
しかし、たとえばCURLOPT_COOKIESESSIONのドキュメントだけでは全体像を実際に見ることはできません。
これを行った人は誰でも、コンセプトを示す簡単なコードを共有してください。
よろしく
ロバート
解決
私が理解している限り、セッションの各リクエストでCURLハンドルを再利用する限り、Cookieを有効にすると、CURLはセッションCookieを自動的に処理します。
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でCookieを有効にするには、2つのうちの1つを設定する必要があります。次のような簡単なことができます:
curl_easy_setopt( Handle, CURLOPT_COOKIEFILE, "" );
これはディスクからCookieを読み取りませんが、カールハンドルの実行中はセッションCookieを有効にします。
他のヒント
bashのコマンドライン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はCookieのほかにトークンを使用するため、通常必要なコードよりも少し複雑です。
HTTP自体はステートレスであるため、PHPのセッションには、いくつかのリクエストに対して何らかの状態を保持する目的があります。 PHPからセッションを取得するには、セッションを開始するphpページをリクエストし、その後のリクエストのために取得したCookieを保持します。
PHPでセッションを開始するのは簡単です-session_start()関数を呼び出します。その関数は、Cookieがリクエストに存在する場合、既存のセッションを再開します。セッションが開始されると、スーパーグローバル配列$ _SESSIONを使用して永続変数を設定できます。 「ログイン」トークンをそこに保存することをお勧めします=)PHPセッションを終了するには、$ _ SESSIONをarray()に設定し、トークンが破棄されるようにします。