使用URLRequest发布表单时,如何在浏览器会话中包含cookie?

时间:2009-01-21 23:12:10

标签: flash cookies urlrequest

(参考this answer:)

当我使用URLRequest发布POST时,它会自动包含来自Flash托管的浏览器会话的Cookie吗?如果没有,我怎么能把它包括在内,或者如果需要的话,检索它们并自己包括它们?

3 个答案:

答案 0 :(得分:8)

如果cookie域(托管Flash控件的页面和您要发布的URL)匹配,则是,默认情况下,浏览器cookie随请求一起发送。作为一个简单的示例(working version here),我将一个简单的ColdFusion页面放在一起,托管一个包含以下代码的SWF:

<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”的cookie,其值为“12345”。单击“提交”并导航到另一个CFM后,我的服务器日志会显示请求中传递的cookie:

  

POST /test.cfm HTTP / 1.1 Mozilla / 5.0
  ASPSESSIONIDAASRDSRT = INDFAPMDINJLOOAHDELDNKBL;
  JSESSIONID = 60302395a68e3d3681c2;
   USERID = 12345
  test.enunciato.org 200

如果你自己测试一下,你也会在那里看到postData。

有意义吗?

答案 1 :(得分: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,您需要一个与上述类似的解决方案来解决此问题。

答案 2 :(得分:0)

不确定闪光灯。但你不能序列化cookie并将其放入URL吗?

也许您希望加密数据或以纯文本形式传输数据,但它可能看起来像:

URL:

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

(或者我错过了什么?)