C + + cURL kullanarak basit bir PHP oturumu yönetmek için nasıl (libcurl)

3 Cevap php

Ben PHP ile iletişim kurmak için libcurl kullanan bir C + + istemci yazıyorum.

Iletişim oturum tabanlı olmalı, ve böylece ilk görev giriş ve PHP komut dosyası bir oturumu kurmak yapmaktır.

Ben C + + veya PHP ya oturumları ile çalışmaya alışık değilim. Ben temelde kurabiye ve iletişim oturum kimliği ile yapmak zorunda olduğunu biliyoruz.

Ben basit bir oturum yönetimi kullanım durumunu gösterir kıvırmak ana sayfasında herhangi bir örnek bulamıyorum.

Ben curl aşağıdaki seçeneklerden biri veya çoğu ile yapmak için bir şey vardır varsayarak yaşıyorum:

CURLOPT_COOKIE
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIESESSION
CURLOPT_COOKIELIST

Ama ben gerçekten sadece örneğin CURLOPT_COOKIESESSION belgelerine gelen büyük resmi göremiyor.

Bu yapmış herkes, kavramı gösteren kod basit bir parça lütfen paylaşın.

Selamlar

Robert

3 Cevap

Sürece oturumda her istek için CURL kolu yeniden olarak, çerezleri etkinleştirmeniz sanki kadarıyla anladığım kadarıyla, CURL sizin için otomatik olarak oturum çerezleri ele alacaktır:

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

Ben COOKIEFILE ve cookiejar hem ayarlamak gerektiğini olumlu değilim, ama belgeleri bu şekilde görünüyor yapar. Her durumda, hiç CURL çerezleri etkinleştirmek için iki birini ayarlamak zorundasınız. Sen gibi basit bir şey yapabilirsiniz:

curl_easy_setopt( Handle, CURLOPT_COOKIEFILE, "" );

Bu diskten herhangi çerezleri okumak değil, ama kıvırmak sapın süresince oturum çerezleri sağlayacaktır.

Bash komut satırı curl için bir örnek var - phpMyAdmin giriş yapıp sonra ihracat işlevini kullanarak. Belki size yardımcı olacaktır:

#!/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 kurabiye yanında belirteçleri kullanır, böylece kod biraz daha karmaşık normalde ihtiyaç daha fazladır.

Kendisi HTTP vatansız olduğu PHP bir oturum, çeşitli istekleri üzerinde bazı devletin korunması amacı vardır. PHP bir oturum almak için, sadece bir oturum başlatır bir php sayfasını istemek ve daha sonraki istekleri için geri almak çerez tutun.

Php bir oturumuna başlamadan basittir - session_start () işlevini çağırın. Çerez isteği varsa bu işlev bir existsing oturumu devam edecektir. Oturumu başladığında, sürekli değişkenler superglobal dizi $ _SESSION kullanılarak ayarlanabilir. Bu bir ')) = var in'-token kaydedilir PHP oturumu bitirmek için, diziye ($ _SESSION için ayarlanmış, belirteç yok böylece saklamak için iyi bir fikirdir.