Javascript桥接到Flash以在闪存中存储SO“cookies”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

在阅读了关于如何唯一识别访问我的网站的计算机的问题之后

可能是使用Flash Cookie: Ubiquitous availability (95 percent of visitors will probably have 闪) You can store more data per cookie (up to 100 KB) Shared across browsers, so more likely to uniquely identify a machine Clearing the browser cookies does not remove the flash cookies. 你需要构建一个小的(隐藏的)flash电影来读写它们。

我试图找出是否有人已经做过这样的事情,所以我不必重新发明轮子。到目前为止,没有运气(也许我不知道正确的搜索术语),除了闪存方面代码

有谁知道这样做的开源库并允许我通过javascript访问?

编辑:你可以使用evercookie做到这一点

提问于
用户回答回答于

BakedGoods似乎正是您所需要的(或者更确切地说,您所需要的); 它是一个Javascript库,它建立了一个统一的接口,可用于在所有本机和一些非本机存储设施中执行常见的存储操作,包括Flash本地共享对象(您所说的“cookie”)。

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

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

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

如果出于某种原因您更愿意推出自己的解决方案,rmeador和ForYourOwnGood已经为您提供了足够的信息来帮助您入门。

但是,他们忘了告诉你如何做一件非常重要的事情:如何使用Javascript访问将处理共享对象的Actionscript代码

首先,您需要将ActionScript代码封装在方法中,然后将该方法注册为其父应用程序的ExternalInterface的一部分:

function handleObjects(/*param1, param2, ... */):void {/*code*/}
ExternalInterface.addCallback("handleObjects");

其次,您需要编译您的Actionscript应用程序(您的代码),并在HTML中创建一个引用结果.swf文件的元素。

然后,假设上述HTML元素表示为名为DOMElement flashDOMElement,您可以使用DOMElement调用您的方法:

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

就是这样!有几件事我们没有提及或略过,但总而言之,推出自己的解决方案并不难。然而,推出自己的可靠解决方案是另一回事,这也是我建议您使用BakedGoods的部分原因。

用户回答回答于

我对回答你的问题犹豫不决,因为这听起来像是危险地接近邪恶...而且,它注定要失败。如果您真的想阻止用户多次回答测验,那么您可以做的最好的事情就是让他们注册一个用户帐户。如果您想阻止他们注册多个用户帐户,您可以让他们通过信用卡或蜗牛邮件进行验证,这两者通常都是难以解决的问题。简而言之,互联网是匿名的。

无论如何,如果你真的想继续这个计划,你可以相当简单地在Flex(Flash的一个变种)中构建你的应用程序。Adobe网站上有大量文档。其中一些是相当稀疏和烦人的,特别是集合API,但它足以满足您的目的。ActionScript(Flash和Flex底层的编程语言)非常像JavaScript,易于学习。Flex有一个免费的SDK(通常在页面中的一个小链接中提供,告诉您获得昂贵的Flex Builder; Flex Builder是一个主要的GUI工具,而您将直接编写没有IDE的直接代码,只有SDK),所以许可证不应成为问题。JavaScript to Flash桥也有详细记录。

扫码关注云+社区

领取腾讯云代金券