2009-01-21 31 views

回答

8

如果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有作爲。

有意義嗎?

+0

謝謝。我還查看了一個HTTP代理(Charles - http://www.charlesproxy.com/),並以此方式確認了您的結果。 – Eric 2009-01-22 18:03:51

+0

真棒,很高興它爲你工作。 – 2009-01-22 18:22:01

0

不確定閃存。但是,你能不能序列化cookie並將其放入URL?

也許你會想對數據進行加密或者以純文本形式發送,但它可能看起來像:

網址:

www.example.com?newurl&cookiesession=true&cookieusername=bob 

(?或者我失去了一些東西)

1

我假設你只是不想在會話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,您將需要類似於上面的解決方案來解決此問題的解決方案。

相關問題