【问题标题】:Is it possible to set the same cookies in Flash as they are used in browser是否可以在 Flash 中设置与在浏览器中使用相同的 cookie
【发布时间】:2012-07-10 08:30:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: php javascript flash cookies session-cookies


    【解决方案1】:

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

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

    【讨论】:

    • “同样的方式”是什么意思?
    • 我的意思是闪存有不同的用户代理/等(我使用的是本机)。我会尝试实施你的建议,然后更新你:)
    【解决方案2】:

    正如strah 所说,通过ExternalInterfaceSharedObject 的组合,您可以在Flash 中保存数据,类似于在Javascript 中使用cookie 来保存数据。你问,你是怎么做的?

    首先,您需要编写使用一个或多个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*/}
    });
    

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

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2019-07-25
      • 2023-03-16
      • 1970-01-01
      • 2015-03-30
      • 2011-09-06
      相关资源
      最近更新 更多