共享对象同HTTP的cookie很相象,它们都是保存在用户机器里的一段数据。共享对象有两种类型:本地的和远程的。在这里,我将把重点放在由Web浏览器的Flash播放器所生成的本地共享对象上。
就像cookie一样,共享对象是用来维护数据的持久性的。对象数据被保存在一个扩展名为.sol文件里,这个文件放在用户硬盘上Flash MX播放器所在的目录下。而这些文件被保存在同生成Flash电影的域(domain)相对应的文件夹里。
共享对象的突破在于,现在Flash能够向用户的硬盘写入数据。在Flash原来的版本里,开发人员不得不依赖Flash同客户脚本(JavaScript)或者服务器脚本(ASP、PHP、CF等等)的联合使用来生成cookie或者基于服务器的文本文件。它们也能够很容易地通过ActionScript
API被创建和删除。
在尝试调用共享对象之前,检查用户Flash播放器的版本是很重要的。共享对象只和Flash 6.0以及更高的版本兼容。播放器的版本可以使用JavaScript或者直接用Flash来确定。
由于HTTP的cookie和共享对象确实存在很多相似之处,因此研究它们之间的异同是很有用的。下面列出了一些重要方面的对比。
所有的Web浏览器在设计上都会限制保存在硬盘上的cookie的数量和大小。关于cookie的规范在RFC
2109里的HTTP状态管理机制文档里有一个概述。一般的浏览器会将cookie的数量限制到300个(每个域20个cookie)。通常情况下,cookie的大小被限制到4,000字节。
而另一方面,Flash的共享对象就没有大小限制。但是,需要考虑磁盘空间的限制:如果你的Flash应用程序想要保存一个大于100KB的对象,那么Flash就会显示一个对话框,提示用户选择是接受还是拒绝这一请求。
Cookie和共享对象都根据砂箱模型(本地输入/输入访问)以及基于域的验证强化了安全性。例如,Flash在本地只能够对共享对象进行数据的读写操作。共享对象也只能由Flash来访问。而cookie一般都能够使用HTML、JavaScript或者VBScript来访问。你可以在Macromedia的白皮书上读到更多关于Flash MX安全性的内容。
Cookie能够轻易地在浏览器里被清除,并通常具有很短的存活期。而共享对象能够在硬盘上保留相当长的一段时间,也没有内置的机制使其在声明的日期和时间内过期。
你被限制了能够保存在cookie里的数据类型。共享对象能够保存各种数据类型(datatype),包括字符串、XML、数字、布尔值、空值、数组和对象。你也可以保存复杂的数据类型,例如自定义的类实例。