0

> Javascript の使用

var username = "user1";
var password = "user1";
jQuery.ajax({ 
    url : "http://domainname.com/rest/user/login.json",
    type : 'post', 
    data : 'username=' + encodeURIComponent(username) + '&password=' + encodeURIComponent(password), 
    dataType : 'json', 
    error : function(data) { console.log("error"); console.error(data); }, 
    success : function(data) { console.log("success"); console.info(data); } 
});

> PHP/Curl の使用

// Method: POST, PUT, GET etc
// Data: array("param" => "value") ==> index.php?param=value

function CallAPI($method, $url, $data = false)
{
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Optional Authentication:
    //curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    //curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    return curl_exec($curl);
}

// Example
$method = "POST";
$url = "http://domainname.com/rest/user/login.json";
$rurl = "http://domainname.com/";
$postdata = array('username'=>'editor1', 'password'=>'editor1');
$response = CallAPI($method, $url, $postdata );

    print "<pre>";
    print_r($response);

結果:

{"sessid":"R03y8-40VBh6FDEIfi9Lnm2kh2SikCxY3105egCynDY","session_name":"SESS2063f746500d52bace78ba433478bd2d","user": ......

JQuery と PHP/Curl からの 2 つの異なるスクリプトを使用してログインしようとしています。

JQueryを起動すると、自動ログインが正常に機能します。しかし、PHP/Curl から自動ログインしようとすると、上記のように成功の応答が返されますが、URL を開いてログインしないと、誰でも問題の原因を説明できます。

私の仮定によれば、Session_name/Sessid が Cookie に保存される可能性はありますか?

4

1 に答える 1

1

私の仮定によれば、Session_name/Sessid が Cookie に保存される可能性はありますか?

他の多くのエンジンと同様に、Drupal にはセッション クックが必要です。この Cookie (session_name=sessid など) を setcookie ( http://php.net/manual/en/function.setcookie.php ) で php に設定し、クライアントに応答を送信します。

l. 私の質問は、PHP/CURL の代わりに jQuery を使用すると、Cookie の値が自動的にブラウザに追加されるのですか?

Jquery がクエリをサーバーに送信すると、ブラウザーは Set-Cookie ヘッダーを含む応答を取得します。これは、chrome 開発者ツール (またはブラウザーの同様のユーティリティ) を使用して確認できます。

サーバー側で PHP コードを実行すると、PHP インタープリターはブラウザーではないため、PHP は応答 Cookie を処理しません。

このダミー クエリ スキームを見てください。

1) Jquery WebBrowser => Apacher/PHP サーバー (login.json コード) Apacher/PHP サーバー => Browser (セッション Cookie での応答)

2) php 側でログイン Web ブラウザ => Apacher/PHP サーバー (自分のスクリプト) Apacher/PHP サーバー => Apacher/PHP (ログイン コードの呼び出し) Apacher/PHP サーバー => Apacher/PHP サーバー (ログインの応答)コードを最初のスクリプトに)


ここで Cookie 情報は失われます。これは、PHP コード内の単なる http クエリであり、それ以上のものではないためです。ヘッダーは自動的に設定されません。setkookie() 関数または $_COOKIE 変数を使用して、この Cookie を手動で設定する必要があります。


Apacher/PHP サーバー => Web ブラウザー (現在のスクリプトに設定したすべての Cookie を含む)

私の文法で申し訳ありませんが、お役に立てば幸いです。

于 2013-11-10T16:02:31.700 に答える