4

(参考这个答案:)

当我使用 URLRequest 发布时,它是否会自动包含来自托管 Flash 的浏览器会话的 cookie?如果没有,我怎样才能让它包含它们,或者如果有必要检索它们并自己包含它们?

4

3 回答 3

8

如果 cookie 域(托管 Flash 控件的页面和您发布的 URL)匹配,那么是的,浏览器 cookie 默认随请求一起发送。作为一个简单的示例(此处的工作版本),我整理了一个简单的 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。

有道理?

于 2009-01-21T23:53:23.890 回答
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 一起发送,您将需要与上述类似的解决方案来解决此问题。

于 2009-07-14T13:05:20.487 回答
0

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

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

网址:

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

ETC

(或者我错过了什么?)

于 2009-01-21T23:54:10.940 回答