(參考this answer :)使用URLRequest發佈表單時,如何從瀏覽器會話中包含cookie?
當我使用URLRequest進行POST時,它是否自動包含來自Flash託管的瀏覽器會話的cookie?如果沒有,我怎麼能讓它包括它們,或者如果需要的話,找回它們幷包括它們自己?
(參考this answer :)使用URLRequest發佈表單時,如何從瀏覽器會話中包含cookie?
當我使用URLRequest進行POST時,它是否自動包含來自Flash託管的瀏覽器會話的cookie?如果沒有,我怎麼能讓它包括它們,或者如果需要的話,找回它們幷包括它們自己?
如果cookie的域(託管Flash控件的頁面和發佈到的URL)匹配,那麼默認情況下瀏覽器cookie會與請求一起發送。作爲一個簡單的例子(working version here),我放在一起承載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" />
...在該頁面中,我設置了一個cookie,名爲「USERID」,值爲「12345」。點擊提交,並導航到另一個CFM後,我的服務器日誌顯示的cookie通過請求中傳遞:
POST /test.cfm HTTP/1.1的Mozilla/5.0
ASPSESSIONIDAASRDSRT = INDFAPMDINJLOOAHDELDNKBL;
JSESSIONID = 60302395a68e3d3681c2;
USERID = 12345
test.enunciato.org 200
如果你測試一下你自己,你會看到在POSTDATA有作爲。
有意義嗎?
不確定閃存。但是,你能不能序列化cookie並將其放入URL?
也許你會想對數據進行加密或者以純文本形式發送,但它可能看起來像:
網址:
www.example.com?newurl&cookiesession=true&cookieusername=bob
等
(?或者我失去了一些東西)
我假設你只是不想在會話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,您將需要類似於上面的解決方案來解決此問題的解決方案。
謝謝。我還查看了一個HTTP代理(Charles - http://www.charlesproxy.com/),並以此方式確認了您的結果。 – Eric 2009-01-22 18:03:51
真棒,很高興它爲你工作。 – 2009-01-22 18:22:01