我使用像uploadify这样的js插件,它使用swf(flash)作为上传器(提供ajax上传)。我只能对登录的人执行上传操作。但是由于我的网站身份验证不是通过 Flash 进行的,因此 Flash 没有浏览器在身份验证后的 cookie。
所以,在浏览器中我是管理员,在 Flash 中我是访客。有没有办法像我在浏览器中一样为 flash 设置相同的 cookie,以在没有额外哈希或其他额外功能的情况下识别自己?
很乐意提供任何帮助/建议/文档/手册的链接。先感谢您!
我使用像uploadify这样的js插件,它使用swf(flash)作为上传器(提供ajax上传)。我只能对登录的人执行上传操作。但是由于我的网站身份验证不是通过 Flash 进行的,因此 Flash 没有浏览器在身份验证后的 cookie。
所以,在浏览器中我是管理员,在 Flash 中我是访客。有没有办法像我在浏览器中一样为 flash 设置相同的 cookie,以在没有额外哈希或其他额外功能的情况下识别自己?
很乐意提供任何帮助/建议/文档/手册的链接。先感谢您!
您可以使用 Javascript 设置和读取 cookie,然后用于ExternalInterface
向 Flash 传递值/从 Flash 传递值。
或者您可以使用SharedObject
设置/读取您的“cookies”,然后将值传递给网站(ExternalInterface
)。
正如 strah 所说,通过 和 的组合ExternalInterface
,SharedObject
您可以在 Flash 中保存数据,类似于使用 cookie 在 Javascript 中保存数据的方式。你要怎么做呢,你问?
首先,您需要编写使用一个或多个SharedObjects
来持久化数据的 ActionScript 代码:
//Obtain the SharedObject named "cookie", procuring a reference
//to the member Object containing its persisted data
var locusLSO:SharedObject = SharedObject.getLocal("cookie");
var lsoData:Object = locusLSO.data;
/////
//Establish a pairing in locusLSO between some key and value
lsoData["key"] = "value";
//Immediately serialize the data contained in locusLSO to its linked file
var statusStr:String = locusLSO.flush();
其次,您需要将 ActionScript 代码封装在一个方法中,然后将该方法注册为其父应用程序的 ExternalInterface 的一部分:
function storeData(/*param1, param2, ... */):void {/*code*/}
ExternalInterface.addCallback("storeData");
第三,您需要编译 Actionscript 应用程序(您的代码),并在 HTML 中创建一个引用生成的 .swf 文件的元素。
然后,假设上述 HTML 元素表示为名为 的 DOMElement flashDOMElement
,您可以使用 DOMElement 调用您的方法:
flashDOMElement.storeData(/*arg1, arg2, ... */);
如果您不想经历所有这些麻烦,请查看BakedGoods ;它是一个 Javascript 库,它建立了一个统一的接口,可用于在所有本地和一些非本地存储设施中进行常见的存储操作,包括 Flash 本地共享对象。
有了它,创建 LSO 可以使用以下简单的代码来完成:
bakedGoods.set({
data: [{key: "key", value: "value"}],
storageTypes: ["flash"],
complete: function(byStorageTypeRemovedItemKeysObj, byStorageTypeErrorObj){/*code*/}
});
检索和删除数据同样简单。相信我,我会知道的;我是它的维护者:)