(参考this answer:)
当我使用URLRequest发布POST时,它会自动包含来自Flash托管的浏览器会话的Cookie吗?如果没有,我怎么能把它包括在内,或者如果需要的话,检索它们并自己包括它们?
答案 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
等
(或者我错过了什么?)