2009-01-21 29 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,您将需要类似于上面的解决方案来解决此问题的解决方案。

相关问题