SharedObject и ActionScript 3.0

Как уже упоминалось, в ActionScript для хранения данных на компьютере пользователя или сервере используется класс SharedObject ("совместно используемый объект" или "общий объект"). При этом общие объекты существуют двух разновидностей:

1.) Удалённые общие объекты (Remote Shared Objects, RSO), которые в своей работе используют серверные технологии.

2.) Локальные совместно используемые объекты (Local Shared Objects, LSO), которые хранят данные непосредственно на компьютере клиента.

Последний способ хранения данных довольно сильно напоминает куки (cookies), широко используемые в веб-программирование. Из-за этого сходства LSO иногда так и называют - flash-куки (flash cookies).

Объекты LSO хранятся в специальном каталоге на компьютере пользователя в виде двоичных файлов с расширением .sol. Путь к этим файлам зависит от используемой OC, а сами файлы могут быть скрытыми. Но если мы всё же найдём искомую папку и файл, то увидим примерно следующее:

Файл с расширением .sol

На ПК может одновременно храниться множество sol-файлов и они могут располагаться в разных каталогах. Естественно, что в этих условиях имена файлов и путь к ним должны быть уникальными (именно поэтому в качестве имён часто используют адреса веб-ресурсов).

Важным моментом является то, что размеры LSO лимитированы. Причём размеры Local Shared Objects зависят от пользователя, который может как увеличить размеры хранилища, так и уменьшить или даже полностью запретить хранение данных на локальном компьютере. Доступ к настройкам локального хранилища доступен через контекстное меню флеш-плеера.

Наводим курсор на экран флеш-плеера и нажимаем правую клавишу мышки. Если размеры swf-файла не менее 215 X 138 пикселов, то появится контекстное меню (может различаться для разных версий флеш-плееров):

Контекстное меню флеш-плеера

В контекстном меню выбираем пункт ПАРАМЕТРЫ. Появляется диалоговое окно, в котором можно настроить целый ряд важных параметров флеш-плейера. Отдельная вкладка посвящена настройке локального хранилища Flash Player.

Диалоговое окно настроек флеш-плеера

Работать с локальными общими объектами в ActionScript 3.0 также просто, как и в ActionScript 2.0.

Код ActionScript 3.0:

/* Создаём (если он ещё не создан) или открываем (если он уже существует на компьютере пользователя) LSO. Метод getLocal() имеет два важных параметра: 1. имя для данного LSO; 2. локальный путь к LSO. */ var so:SharedObject = SharedObject.getLocal("edapskov","/"); /* Объект LSO имеет свойство data, в котором и хранятся переменные. Поэтому, для сохранения данных используем код вида: объект_LSO.data.переменная = значение; В LSO можно сохранять объекты разных типов данных. */ so.data.myVarBoolean = true;// сохраняем переменную типа Boolean so.data.myVarInt = -10;// сохраняем переменную типа int so.data.myVarUint = 10;// сохраняем переменную типа uint so.data.myVarNumber = 10.256;// сохраняем переменную типа Number so.data.myVarString = "Александр";// сохраняем переменную типа String so.data.myVarArray = ['Бакунин','Прудон','Штирнер'];// сохраняем массив so.data.myVarDate = new Date();// сохраняем дату so.data.myVarObject = {first_name:'Пётр',last_name:'Кропоткин'};// сохраняем объект /* Флеш-плеер автоматически сохраняет данные LSO на компьютере пользователя, но всё же руководства по языку AS рекомендуют делать это явно с помощью метода flush(). */ so.flush(); /* Чтение данных из LSO. */ trace("Значения сохранённых в LSO переменных:"); trace(so.data.myVarBoolean); trace(so.data.myVarInt); trace(so.data.myVarUint); trace(so.data.myVarNumber); trace(so.data.myVarString); trace(so.data.myVarArray); trace(so.data.myVarDate); trace(so.data.myVarObject.first_name + ' ' + so.data.myVarObject.last_name); /* Узнаём размер LSO в байтах. */ trace("Размер LSO: "+so.size+" байт");

Хотя простого вызова метода flush(), как правило, вполне достаточно для явной записи общего объекта на жесткий диск, ряд руководств рекомендует проконтролировать данный процесс. Так, "ActionScript 3.0. Сборник рецептов." предлагает конструкцию следующего вида:

try { var flushResult:String = so.flush(); if (flushResult == SharedObjectFlushStatus.PENDING) { so.addEventListener(NetStatusEvent.NET_STATUS, onStatus); } else if (flushResult == SharedObjectFlushStatus.FLUSHED) { trace('Данные успешно сохранены.'); } } catch (е:Error) { trace('Недостаточно памяти для сохранения данных. Внесите изменения в настройки флеш-плеера.'); Security.showSettings( SecurityPanel.LOCAL_STORAGE); } function onStatus( event:NetStatusEvent ):void { if (event.info.code == "SharedObject.Flush.Success") { trace('Данные успешно сохранены.'); } else if (event.info.code == "SharedObject.Flush.Failed") { trace('Не удалось сохранить данные.'); } so.removeEventListener(NetStatusEvent.NET_STATUS, onStatus); }

Для того, чтобы очистить локальный общий объект от хранимой в нём информации, достаточно вызвать метод clear():

so.clear();

LSO довольно удобный механизм для хранения информации на стороне клиента. Главные его достоинства:

- хранение больших объёмов информации;

- хранение информации без ограничений по времени (как в куки);

- хранение разнотипной информации.

Есть и недостатки. Главный недостаток локальных общих объектов для флеш-разработчиков - полная зависимость от воли пользователя, который может даже запретить использование LSO своим флеш-плеером. Впрочем, это субъективное мнение :-)

Автор: admin

Дата добавления: 2011-08-10

Просмотров: 6093

Рейтинг поста: +6-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2016-07-14
К сожалению, не смогу помочь: это весьма специфическая серверная технология, которая прошла мимо меня.
Комментатор
Комментарий добавил(а): Александр
Дата добавления: 2016-07-14
Замечательное пояснение! Что касается getLocal, то у меня всё получилось и работает.
А как использовать getRemote ??? Я попробовал, но программа выдала ошибку:

Error: Error #2134: Cannot create SharedObject.
at flash.net::SharedObject$/getRemote()

Подскажите, пожалуйста, в чём проблема? Очень нужно!
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика