Что такое SharedObject?
SharedObject - это название класса, с помощью которого .swf-файл может записывать и читать различные данные на компьютере пользователя. Способ записи данных SharedObject имеет сходство с записью файлов сookie в браузерах.
Как же это работает?
Работает это следующим образом: один .swf-файл может записать любую информацию на клиентском компьютере только для себя, и прочитать её позже сможет только тот же .swf-файл, который её записал.
Чтобы записать данные нужно:
Где и как хранятся данные на локальном диске пользователя?
Данные записываются в файлы с расширением "sol" в формате AMF. Найти их можно в директории:
Windows: C:\Users\<Имя пользователя>\AppData\Roaming\Macromedia\Flash Player\#SharedObjects\<Случайное число>\<Имя домена>\<Путь до .swf-файла>\<Имя контейнера>.sol
Mac OS X: ~/Library/Preferences/Macromedia/Flash Player/#SharedObjects/<Случайное число>/<Имя домена>/<Путь к .swf-файлу>/<Имя контейнера>.sol
Для Windows это выглядит так:
Чем открывать .sol-файлы?
Прочитать содержимое .sol-файлов можно, открыв их использую встроенную во FlashDevelop утилиту написанную на C# под названием "SharedObject Reader"
Также можно найти автономную версию этой программы, написанную на Python, "SOLReader".
Но как оказалось, в последних версиях FlashDevelop эта программа не работает. Если кто знает почему или как можно её отремонтировать пожалуйста сообщите в комментариях.
В качестве альтернативы нашлась другая утилита. Называется ".sol Editor". Умеет не только читать но и писать в .sol-файлах. Интересно конечно :) Но как это применить на практике пока не придумаю.
А как же безопасность?
Естественно Adobe позаботились о безопасности такого взаимодействия .swf-файла с файловой системой пользователя и наложили ограничение на объем записываемых данных. По умолчанию он равен 100 Кб. Но пользователь сам вправе решить, насколько он доверяет определенному домену, и может увеличить, уменьшить, либо вообще убрать это ограничение. Сделать это можно в параметрах Adobe Flash Player:
Где и как использовать?
Это вопрос фантазии. Например, в своих медиа-плеерах я записываю громкость звука, чтобы пользователь её постоянно не убавлял или не прибавлял когда заходил заново.
Смотрите также:
SharedObject - это название класса, с помощью которого .swf-файл может записывать и читать различные данные на компьютере пользователя. Способ записи данных SharedObject имеет сходство с записью файлов сookie в браузерах.
Кроме того, SharedObject может сохранять данные и на сервере. Используется данная возможность в основном в тесной интеграции с Flash Media Server'ом. Рассматривать в рамках этого поста, возможность работы SharedObject с сервером я не буду. Поговорим только о возможностях работы с локальной системой.
Работает это следующим образом: один .swf-файл может записать любую информацию на клиентском компьютере только для себя, и прочитать её позже сможет только тот же .swf-файл, который её записал.
Чтобы записать данные нужно:
- Получить или создать экземпляр уникального контейнера
- Записать в свойство экземпляра "data" необходимые данные
- Сохранить данные экземпляра на локальный диск компьютера
var so:SharedObject = SharedObject.getLocal("as3coder-player");
so.data.volume = 100;
so.flush();
При следующем открытии, .swf-файл может прочитать ранее записанные им данные.
- Получить экземпляр уникального контейнера
- Получить необходимые данные у свойства экземпляра "data"
var so:SharedObject = SharedObject.getLocal("as3coder-player");
var volume:Number = so.data.volume;
Где и как хранятся данные на локальном диске пользователя?
Данные записываются в файлы с расширением "sol" в формате AMF. Найти их можно в директории:
Windows: C:\Users\<Имя пользователя>\AppData\Roaming\Macromedia\Flash Player\#SharedObjects\<Случайное число>\<Имя домена>\<Путь до .swf-файла>\<Имя контейнера>.sol
Mac OS X: ~/Library/Preferences/Macromedia/Flash Player/#SharedObjects/<Случайное число>/<Имя домена>/<Путь к .swf-файлу>/<Имя контейнера>.sol
Для Windows это выглядит так:
Чем открывать .sol-файлы?
Прочитать содержимое .sol-файлов можно, открыв их использую встроенную во FlashDevelop утилиту написанную на C# под названием "SharedObject Reader"
Также можно найти автономную версию этой программы, написанную на Python, "SOLReader".
Но как оказалось, в последних версиях FlashDevelop эта программа не работает. Если кто знает почему или как можно её отремонтировать пожалуйста сообщите в комментариях.
В качестве альтернативы нашлась другая утилита. Называется ".sol Editor". Умеет не только читать но и писать в .sol-файлах. Интересно конечно :) Но как это применить на практике пока не придумаю.
А как же безопасность?
Естественно Adobe позаботились о безопасности такого взаимодействия .swf-файла с файловой системой пользователя и наложили ограничение на объем записываемых данных. По умолчанию он равен 100 Кб. Но пользователь сам вправе решить, насколько он доверяет определенному домену, и может увеличить, уменьшить, либо вообще убрать это ограничение. Сделать это можно в параметрах Adobe Flash Player:
Где и как использовать?
Это вопрос фантазии. Например, в своих медиа-плеерах я записываю громкость звука, чтобы пользователь её постоянно не убавлял или не прибавлял когда заходил заново.
Смотрите также:
В 10.1 плеере могли подправить формат файла SharedObject?
ОтветитьУдалитьПри попытке открыть файл с помощью FD-инструмента вываливается ерорр: "Invalid Header".
Программа по ссылке тоже падает с похожей ошибкой.
Действительно утилита не работает :( Хотя раньше отлично работала...
ОтветитьУдалить.sol-файлы хранятся в формате AMF. Появился он начиная с 6 версии плеера, сейчас его принято называть AMF 0. Начиная с 9 версии плеера, и с ActionScript 3.0, он стал именоваться AMF 3.
Но я думаю дело тут не во FlashPlayer. Мне кажется, это какая-то собственная ошибка утилиты. Причем, если верить форуму FlashDevelop, проявляется не у всех.
В качестве компенсации :) предлагаю другую программу ".sol Editor". Она умеет не только читать, но и редактировать.
Еще раз приношу свои искренние извинения за недостоверную информацию :(
.sol Editor рулит! спасибо.
ОтветитьУдалитьМожно ли поместить в so.data экземпляр класса (объект)? Т.е. чтобы при чтении мы получили объект этого класса?
ОтветитьУдалитьВ официальной справке говориться, что можно хранить объекты любого типа. Пробуйте :)
ОтветитьУдалитьЯ бы ещё добавл про кодировку записи. Что из AS3 неудастся роботать с SharedObject AS2-ого.
ОтветитьУдалитьhttp://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html#defaultObjectEncoding
При всем глубоком уважении к автору этой статьи вынужден заметить, что его фраза "swf-файл может записать любую информацию на клиентском компьютере только для себя, и прочитать её позже сможет только тот же .swf-файл, который её записал." не соответсвует действительности.
ОтветитьУдалитьВ действительности же метод getLocal объекта ShareObject имеет вид:
getLocal( name: String, [localPath: String], [secure: Boolean]
и в методе getLocal можно в явном виде указать localPath откуда брать sol- файл. Так можно указать sol -файл созданsq и другим swf- файлом.
Можно вообще указать localPath к sol- файлу в простейшей форме "\". И тогда к этому sol- файлу смогут обращаться вообще любые swf - файлы из домена, в котором этот sol- файл был создан.
Если же localPath не указывать, то да действительно по умолчанию создается sol- файл, к которому может иметь доступ, лишь создавший его swf- файл.
Вы абсолютно правы!
ОтветитьУдалитьСогласитесь, уже само название ShareObject (т.е. Совместно используемый объект) предполагает, что создается некий объект, кторый будет потом совместно использоваться более чем объектом (в данном случае эти объекты это swf- файлы). Использовать ShareObject в режиме, когда число его совместных пользователей (в данном случае swf- файлов), равно единице это явно весьма не полное использование возможностей ShareObject.
ОтветитьУдалитьПоэтому, столь неудачную ошибку в статье нужно срочно исправить чтобы не дезинформировать неопытных пользователей. Тогда и мой комментарий можно удалить.