7

PHPSESSID試してみてください。curl でCookieを渡すことができません。私は他の何人かが説明したものと同様の設定をしていますが、提案されたソリューションを機能させることができませんでした。

に get リクエストを送信するページがありますpageA.phppageA.php別のサーバーにあるからの情報が必要なpageB.phpので、curl を使用しています。 pageBページに出入りするために必要なセッション状態を維持します。

Cookieではなく、他の Cookie を からpageAに渡すことができます。pageBPHPSESSID

次のように動作します (Cookie が に届きますpageB)。
$options[CURLOPT_COOKIE] = "myPHPSESSID=" . $sessionId;

以下はしません:

$options[CURLOPT_COOKIE] =  "PHPSESSID=" . $sessionId;

(私は $options 配列を構築し、それを に渡しますcurl_set_opt_array)

curl_exec実際、後者は、呼び出しが決して返されない (そしてpageB到達しない)ため、私が識別できない何らかのエラーを引き起こします。

CURLOPT_COOKIE を使用する代わりにヘッダーを設定しようとしましたが、成功しませんでした:

$options[CURLOPT_HTTPHEADER][] = "Cookie: myPHPSESSID=" . $sessionId;

上記は問題なく動作しますが、

$options[CURLOPT_HTTPHEADER][] = "Cookie: PHPSESSID=" . $sessionId;

ではない。

PHP は明らかに、手動で PHPSESSID を設定することを望んでいません。関連性があるかどうかはわかりませんが、pageA で呼び出しを行うことはありませんstart_session()(ただし、呼び出してみましたが、同じ結果が得られました)。

私は、(おそらく) セッション ID を別の名前の Cookie として渡すだけで、pageB 呼び出しset_session_id()などを行うことができることに気付きました。しかし、回避策を作成するよりも、自分が間違っていることを修正したいので、自分がやっていることがうまくいかない理由を本当に知りたいです。役立つ場合は、ping を実行しているさまざまなヘッダーのダンプをいくつか提供できますが、この質問は今のところ十分に長いと思います。

ありがとう...

4

1 に答える 1

11

session_write_close();curl_exec の前に呼び出します。

これは私の命を救いました: http://kmak.1funkybit.com/?p=126 (説明のために読んでください)。

例:

<?php
session_start();
var_dump($_SESSION); //See what's in session
echo "<br>";



$c = curl_init('http://192.168.100.204/logintest/index.php?r=AccessTest/CheckAcess');
$parametros_post = 'action=verChau';
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $parametros_post);
curl_setopt($c, CURLOPT_VERBOSE, TRUE);
curl_setopt($c, CURLOPT_COOKIE, 'PHPSESSID=' . $_COOKIE['PHPSESSID']);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
session_write_close();
$page = curl_exec ($c);
echo "<br>";
echo "<br>";
echo $page;
curl_close ($c);


?>
于 2013-03-26T19:04:16.710 に答える