首页 > AS3.0编程 So本地数据存储(“超级cookies”)--AS3:Local SharedObject

AS3.0编程 So本地数据存储(“超级cookies”)--AS3:Local SharedObject

Flash影片运行过程中,大多数的数据都存储于影片本身,一旦影片被关闭,这些数据也就从内存中被清除掉,下次运行时,数据将从头开始。若想存储数据或者让客户端的多个影片共享同一组数据,就要想办法把数据存储在Flash播放器之外。 

在ActionScript 3.0中,SharedObject类实现了在客户端机器中持久性存储数据。有两种类型的共享对象:本地和远程。本节主要介绍在本地储存数据。 



创建ShareObject对象



Flash的ShareObject对象一般简称为SO,类似于Web浏览器中的cookies。它们被一些开发者称为“超级cookies”,因为SO可以存储大量数据,且存储和读取的都是原生的ActionScript类型数据。 

ShareObject 对象默认的空间大小100KB,用户可以通过FlashPlayer'sSettingsManager控制的使用空间大小,来严格限制被使用的空间。存储在本地计算机的SO文件是一种二进制文件,扩展名为.sol。不同的SWF影片可以通过flash.net.SharedObject类进行读写.sol文件。 

创建的.sol文件被放置在Flash播放器对应的应用程序数据目录,以Windows为例,目录为:C:Documents and SettingsAdministratorApplication DataMacromediaFlash Player#SharedObjects,在此主目录下使用随机字符命名目录,记录数据。 



向SO上写入数据



要实现添加数据到SO上,只需给SO对象的data属性添加属性值。共享对象SO有个内建的属性data,data属性类型为object,因而可以添加任何信息上去。如下面的示例代码所示。 

//存储username值给so共享对象 

so.data.username= "浪子啸天"; 

注意:既不能直接向SO共享对象赋值,也不能直接向SO共享对象的data属性赋值,这样的结果都是错误的。 

如下面的两行写入数据的方法都是错误的,错误代码如下所示。 

so.username="浪子啸天"; 

so.data="浪子啸天"; 



读取SO数据



要实现在客户端读取SO数据,原理很简单。因为这些持久性数据都保存在共享对象的data属性里,只需要访问Data对象的相关属性就Ok了。 

下面的示例实现读取SO中储存的数据,代码如下所示。 

var so:SharedObject=SharedObject.getLocal("test") 

//将数据写入so 

so.data.username="浪子啸天" 

so.data.sex="男" 

//写入数据 

so.flush() 

//读取so中的username 

var user=so.data.username 

trace(user)//输出:浪子啸天 

trace(so.data.sex)//输出:男 



删除保存的SO共享数据



要实现删除共享对象中的某个属性值或者删除整个共享对象,需要使用两种不同的方法:用delete删除共享对象的data属性中的值;使用clear()方法清除整个共享对象。 

下面的示例使用delete关键字删除SO共享对象的data对象中的sex属性,代码如下所示。 

var so:SharedObject=SharedObject.getLocal("test") 

//将数据写入so 

so.data.username="浪子啸天" 

so.data.sex="男" 

//写入数据 

so.flush() 

//删除so中的sex属性 

delete so.data.sex 

trace(so.data.sex)//输出:undefined,说明删除成功 

trace(so.data.username)//输出:浪子啸天



=================================================================

 在 AS3 里的Local SharedObject用法跟 AS2 是一样的。

SO存储在计算机的一个文件里面,跟Cookie很相似。路径是C:Documents and Settings用户名Application DataMacromediaFlash Player#SharedObjects



基本用法:   



//定义一个SO 

    var mySO:SharedObject; 

    //获取本地的一个SO 

    mySO = SharedObject.getLocal("beniSO"); 

    //在SO里面存储数据 

    mySO.data.name = "Beni"; 

    mySO.data.sex = "sex"; 

    //获取SO里面的数据 

    trace ("name is: " + mySO.data.name); 

    trace ("sex is: " + mySO.data.sex);





注意:本地Flash存储设置不能为“无”,而且容量未满。

     



Local SharedObject使用起来有不少限制,所以都是用来记录一些不大重要的信息。例如登陆时的用户名之类的。

现在不少Flash游戏有存档,绝大不分也是用这个SO。



AS3 游戏存档





我不知道大多数的Flash游戏是不是有本地存档,但是我的游戏确实碰到了

在这里向各位高手请教一下,AS3中如何读写本地文件,我知道Air中有flash.filesystem这个包

但是在 Flash Player 中(在浏览器中运行的 SWF 文件中)未公开这些属性和方法

有高手能给点思路吗?





在网页中的flash游戏,如果需要用到本地存储,有两种方式考虑:

1、Cookie相关的。平常网页相关的存储都可以使用,通过flash调用页面js实现。

2、SharedObject。这是flash自带的存储功能,默认大小为100k。





SharedObject对象的使用方法不详细介绍,类的方法属性可以参考:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html

例子:





  

try {

    var so:SharedObject = SharedObject.getLocal("flash_cookie", "/");

    so.data["test"] = true;

    trace(so.data["test"]);

}catch (e:Error) { }

更多相关:

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...

  • 点云PCL免费知识星球,点云论文速读。文章:DSP-SLAM: Object Oriented SLAM with Deep Shape Priors作者:Jingwen Wang Martin Runz Lourdes Agapito编译:点云PCL代码:https://github.com/JingwenWang95/DSP-S...

  • RAM缓存 新RAM缓存算法(CLFUS) 新的RAM缓存使用的创意来自许多缓存替换策略和算法,包括LRU,LFU,CLOCK,GDFS及2Q,它被命名为时钟周期内最小频繁使用大小算法CLFUS(Clocked Least Frequently Used by Size)。它避开了任何专利算法,具有如下特性: 均衡最近性(Rec...

  • MP4 |视频:AVC,1280×720 30 fps |音频:AAC,48 KHz,2 Ch |时长:2h 12m 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:560M C4D是一个有抱负的运动图形艺术家和设计师的重要工具。借助C4D,您可以使用3D对象、动态效果和动画来增强运动图形、模型和可视化效果。本课...

  • 文章目录先说问题:再说解决尝试1:尝试2(该尝试建议先在自己环境搭配对应业务测试通过后再现场尝试): 感谢 学无止境996同学的陪伴和vigourtyy美丽女友的支持,直到这个解决问题的深夜 先说问题: ceph 12.2.1生产环境:3副本 tier + 3副本data 机房在拥有业务的情况下重启集群交换机,产生如下场景...

  • 这周主要学习了java中的类和对象的知识点,发现和C++中的类和对象极为相似,对于类和对象的概念理解起来也简单。同时在自学的过程中也把类的知识重新复习巩固了一下(如类的三大特征:继承,封装和多态,构造,成员对象的访问权限,构造,无参有参函数的调用等),同时也了解到一些新的概念,比如类对象创建和引用占据堆内存和栈内存,输出对象时默认调...