0

我使用像uploadify这样的js插件,它使用swf(flash)作为上传器(提供ajax上传)。我只能对登录的人执行上传操作。但是由于我的网站身份验证不是通过 Flash 进行的,因此 Flash 没有浏览器在身份验证后的 cookie。

所以,在浏览器中我是管理员,在 Flash 中我是访客。有没有办法像我在浏览器中一样为 flash 设置相同的 cookie,以在没有额外哈希或其他额外功能的情况下识别自己?

很乐意提供任何帮助/建议/文档/手册的链接。先感谢您!

4

2 回答 2

2

您可以使用 Javascript 设置和读取 cookie,然后用于ExternalInterface向 Flash 传递值/从 Flash 传递值。

或者您可以使用SharedObject设置/读取您的“cookies”,然后将值传递给网站(ExternalInterface)。

于 2012-07-10T09:05:59.140 回答
1

正如 strah 所说,通过 和 的组合ExternalInterfaceSharedObject您可以在 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*/}
});

检索和删除数据同样简单。相信我,我会知道的;我是它的维护者:)

于 2016-07-05T00:09:21.413 回答