(この回答を参照して:)
URLRequest で POST すると、Flash がホストされているブラウザ セッションからの Cookie が自動的に含まれますか? そうでない場合、どうすればそれらを含めることができますか、または必要に応じてそれらを取得して自分で含めることができますか?
(この回答を参照して:)
URLRequest で POST すると、Flash がホストされているブラウザ セッションからの Cookie が自動的に含まれますか? そうでない場合、どうすればそれらを含めることができますか、または必要に応じてそれらを取得して自分で含めることができますか?
(Flashコントロールをホストしているページと投稿先のURLの)Cookieドメインが一致する場合、はい、ブラウザのCookieはデフォルトでリクエストとともに送信されます。簡単な例(ここでは作業バージョン)として、次のコードを含むSWFをホストする単純なColdFusionページをまとめました。
<mx:Script>
<![CDATA[
private function btn_click():void
{
var req:URLRequest = new URLRequest("http://test.enunciato.org/test.cfm");
req.method = URLRequestMethod.POST;
var postData:URLVariables = new URLVariables();
postData.userName = "Joe";
postData.userCoolness = "very-cool";
req.data = postData;
navigateToURL(req);
}
]]>
</mx:Script>
<mx:Button click="btn_click()" label="Submit" />
...そしてそのページで、「USERID」という値の「12345」というCookieを設定しました。[送信]をクリックして別のCFMに移動すると、サーバーログにリクエストで渡されたCookieが表示されます。
POST /test.cfm HTTP / 1.1 Mozilla / 5.0
ASPSESSIONIDAASRDSRT = INDFAPMDINJLOOAHDELDNKBL;
JSESSIONID = 60302395a68e3d3681c2;
USERID = 12345
test.enunciato.org 200
自分でテストすると、そこにもpostDataが表示されます。
わかる?
サーバー側の認証目的でセッションIDのようなものを含めたくないだけだと思います。
AS からブラウザーの Cookie を取得するには (JavaScript を有効にする必要があります。ほとんどのユーザーにとっては問題になりません)。
public var cookieStr:String;
public var cookieHeader:URLRequestHeader;
ExternalInterface.call('eval','window.cookieStr = function () {return document.cookie};')
cookieStr = ExternalInterface.call('cookieStr');
cookieHeader = new URLRequestHeader("Cookie",cookieStr);
次に、URLRequest オブジェクトを使用する場合:
var urlRequest:URLRequest = new URLRequest(...blah blah, url here, etc etc);
urlRequest.requestHeaders.push(cookieHeader);
Firefox はセッションの Cookie を URLRequest とともに送信しないことに注意してください。この問題を解決するには、上記のような解決策が必要です。
フラッシュについてはよくわかりません。しかし、Cookieをシリアル化してURLに入れることはできませんか?
データを暗号化するか、プレーンテキストで送信したい場合がありますが、次のようになります。
url:
www.example.com?newurl&cookiesession=true&cookieusername=bob
等
(または私は何かが欠けていますか?)