(参考this answer :)使用URLRequest发布表单时,如何从浏览器会话中包含cookie?
当我使用URLRequest进行POST时,它是否自动包含来自Flash托管的浏览器会话的cookie?如果没有,我怎么能让它包括它们,或者如果需要的话,找回它们并包括它们自己?
(参考this answer :)使用URLRequest发布表单时,如何从浏览器会话中包含cookie?
当我使用URLRequest进行POST时,它是否自动包含来自Flash托管的浏览器会话的cookie?如果没有,我怎么能让它包括它们,或者如果需要的话,找回它们并包括它们自己?
如果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有作为。
有意义吗?
不确定闪存。但是,你能不能序列化cookie并将其放入URL?
也许你会想对数据进行加密或者以纯文本形式发送,但它可能看起来像:
网址:
www.example.com?newurl&cookiesession=true&cookieusername=bob
等
(?或者我失去了一些东西)
我假设你只是不想在会话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,您将需要类似于上面的解决方案来解决此问题的解决方案。
谢谢。我还查看了一个HTTP代理(Charles - http://www.charlesproxy.com/),并以此方式确认了您的结果。 – Eric 2009-01-22 18:03:51
真棒,很高兴它为你工作。 – 2009-01-22 18:22:01