我使用像uploadify这样的js插件,它使用swf(flash)作为上传器(提供ajax上传)。 我只能为登录的人执行上传操作。但由于我的网站身份验证不是通过闪存进行的,因此Flash在浏览器验证后没有cookie。
所以,在浏览器中我是管理员,在flash中我是客人。有没有办法像我在浏览器中设置闪存相同的cookie来识别自己而没有额外的哈希或其他额外功能?
非常乐意接受任何文档/手册的帮助/建议/链接。 提前谢谢!
答案 0 :(得分:2)
您可以使用Javascript设置和读取Cookie,然后使用ExternalInterface
将值传递给Flash。
或者您可以使用SharedObject
设置/阅读“Cookie”,然后将值传递到网站(ExternalInterface
)。
答案 1 :(得分:0)
正如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元素表示为名为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*/}
});
检索和删除数据同样简单。我知道,请相信我所有这一切;我是它的维护者:))