是否可以在Flash中设置与浏览器中使用的cookie相同的cookie

时间:2012-07-10 08:30:10

标签: php javascript flash cookies session-cookies

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

所以,在浏览器中我是管理员,在flash中我是客人。有没有办法像我在浏览器中设置闪存相同的cookie来识别自己而没有额外的哈希或其他额外功能?

非常乐意接受任何文档/手册的帮助/建议/链接。 提前谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用Javascript设置和读取Cookie,然后使用ExternalInterface将值传递给Flash。

或者您可以使用SharedObject设置/阅读“Cookie”,然后将值传递到网站(ExternalInterface)。

答案 1 :(得分:0)

正如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元素表示为名为flashDOMElement的DOMElement,您可以使用DOMElement调用您的方法:

flashDOMElement.storeData(/*arg1, arg2, ... */);

如果您不想完成所有这些操作,请查看BakedGoods;它是一个Javascript库,它建立了一个统一的接口,可用于在所有本机和一些非本机存储设施中执行常见的存储操作,包括Flash本地共享对象。

有了它,可以使用以下代码完成创建LSO:

bakedGoods.set({
    data: [{key: "key", value: "value"}],
    storageTypes: ["flash"],
    complete: function(byStorageTypeRemovedItemKeysObj, byStorageTypeErrorObj){/*code*/}
});

检索和删除数据同样简单。我知道,请相信我所有这一切;我是它的维护者:))