全て、
申し訳ありませんが、これはおそらく非常に奇妙な質問です。
私はフラッシュRIAに取り組んでいます。これが行うことの 1 つは、(別のドメインに存在する) ASP ページを呼び出してデータを取得することです。
ただし、その ASP ページでは、ユーザーがその ASP ページを呼び出す前に、そのサイトにログインする必要があります。
そのため、これを Flash アプリで機能させるための最初の試みは、loadVars.sendAndLoad() を使用してログイン変数をログイン ページにポストすることでした。これにより、Cookie/セッション変数が設定され、「ログイン」ステータスが確立されます。その後、Flash アプリが ASP ページを呼び出して必要なデータを要求すると、すべてが機能します。言い換えると、最初のページへの loadVars.sendAndLoad 呼び出しでログインし、そのログイン ステータスが (何らかの方法で) 維持されるため、後で Flash アプリが ASP ページを呼び出したときに、ASP ページはまだログインしていると認識します。の。
Flash アプリケーションが別のドメインにデプロイされることを除いて、全体的に優れたソリューションです。つまり、ASP ページ (およびログイン ページ) は domainA.com にありますが、Flash アプリケーションは domainB.com にあります。また、Flash アプリは異なるドメインの URL を呼び出すことはできません (クロスドメイン ポリシー ファイルについては知っていますが、さまざまな理由から、それはオプションではありません)。
それで、私の次の考えはこれでした-cURLを使用してログイン変数をログインページに渡すPHPページをdomainB.comにセットアップします。cURL を使用して ASP ページを呼び出す別の PHP ページを domainB.com にセットアップします。
次に、「プロキシ」として機能する PHP ページを呼び出すように Flash アプリを設定できます。
ただし、これは機能しません。最初の PHP ページ (domainA.com のログイン ページに変数を渡すページ) を呼び出すと、それが機能すると思います。しかし、次に 2 番目の PHP ページを呼び出すと、domainA.com の ASP ページは、ログインしていないかのように要求を拒否します。
つまり、Flash からすべて実行すると、最初のリクエストから次のリクエストまで「ログイン」状態が維持されているように見えます。ただし、PHP ページからすべてを実行すると、ログイン状態が維持されません。
最初の PHP ページでシステムにログインしているようです。しかし、2 番目の PHP ページは、ログインしているとは認められていません。
この違いを説明する Cookie が Flash と PHP でどのように異なる方法で処理されるかについて何か考えはありますか?
アドバイスやガイダンスに基づいて、より詳細な情報を提供できることをうれしく思います。
よろしくお願いします!
- - 編集 - -
素晴らしいフィードバックと提案に基づいて、私はこれを機能させました。私はそれを磨く機会がありませんでした。一部の cURL オプションが不要または冗長である可能性があります。しかし、少なくとも、それは機能します。コードは次のとおりです。
<?php
$ckfile = tempnam (".", "CURLCOOKIE");
$url_1 = 'https://somedomain.com/loginService';
$url_2 = 'https://somedomain.com/getMyData.asp';
$fields_1 = array(
'field1'=>"blah",
'field2'=>"blah",
'field3'=>"blah",
);
$fields_2 = array(
'fieldX'=>"blah",
'fieldY'=>"blah",
'fieldZ'=>"blah",
);
$a='';
$postvars_1 = '';
foreach($fields_1 as $key=>$value) {
$postvars_1.= $a.urlencode($key).'='.urlencode($value);
$a='&';
}
$a='';
$postvars_2 = '';
foreach($fields_2 as $key=>$value) {
$postvars_2.= $a.urlencode($key).'='.urlencode($value);
$a='&';
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
curl_setopt($ch, CURLOPT_URL, $url_1);
curl_setopt($ch, CURLOPT_POST, count($fields_1));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars_1);
$result_1 = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, $url_2);
curl_setopt($ch, CURLOPT_POST, count($fields_2));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars_2);
$result_2 = curl_exec($ch);
curl_close($ch);
header("Content-type: text/xml");
print $result_2;
unlink($ckfile);
?>
言うまでもなく、これを達成するためのより良い方法や、コードに深刻な問題がある可能性があります。しかし、今のところ、働くことは何もしないよりはましです。コミュニティや以下の人々の助けがなければ、これを機能させることはできなかったでしょう。大変感謝します!