Статьи

Локальный общий объект (Flash Cookie)


Из Википедии cookie-файл браузера — это «небольшой фрагмент текста, сохраняемый на компьютере пользователя веб-браузером. Файл cookie состоит из одной или нескольких пар имя-значение, содержащих биты информации».

Веб-приложение использует куки для управления сессиями, персонализации и отслеживания. Большинство браузеров ограничивают размер файла cookie до 4 КБ.

В приложении Flex хранение данных на компьютере пользователя для последующего использования осуществляется с использованием локальных общих объектов, а не файлов cookie. Локальный общий объект может хранить до 100 КБ данных без разрешения пользователя. В отличие от файлов cookie, которые могут хранить только текстовые значения, локальные общие объекты могут хранить множество типов данных, включая Number, String, Boolean, XML, Date, Array & Object. Экземпляры пользовательского класса также могут храниться в локальном общем объекте, когда пользовательский класс зарегистрирован с помощью
тега метаданных [RemoteClass] .

Создать / получить локальный общий объект

Процесс создания нового локального общего объекта или извлечения существующего локального общего объекта идентичен. В обоих случаях используется статический метод getLocal ().

public static function getLocal(name:String, localPath:String = null, secure:Boolean = false):SharedObject

Сначала выполните вызов статического метода getLocal () класса SharedObject, а затем сохраните ссылку в переменной.

var myNewLocalSharedObject:SharedObject = SharedObject.getLocal("myNewLocalSharedObject");

Flash Player будет искать в локальном каталоге на компьютере пользователя локальный общий объект с именем myNewLocalSharedObject. Более конкретно, он будет искать в каталоге, уникальном для домена SWF, файл с именем myNewLocalSharedObject.sol. Если myNewLocalSharedObject.sol найден, возвращается ссылка на существующий локальный общий объект. В противном случае создается myNewLocalSharedObject.sol и возвращается ссылка на вновь созданный локальный общий объект.

Чтобы определить, был ли возвращен новый или существующий локальный общий объект, запросите свойство размера.

var myNewLocalSharedObject:SharedObject = SharedObject.getLocal("myNewLocalSharedObject");

if (myNewLocalSharedObject.size > 0)
{
    trace("Existing Local Shared Object");
}
else
{
    trace("New Local Shared Object");
}

Метод getLocal () имеет три параметра. Их следует использовать следующим образом:

  • Параметр name необходим для назначения имени локальному общему объекту.
  • Параметр localPath является необязательным и должен использоваться, если вы ожидаете, что несколько файлов SWF из домена SAME нуждаются в доступе к одному локальному общему объекту, или если файл SWF, отвечающий за создание локального общего объекта, может быть перемещен в другое место в пределах домена SAME.
  • Параметр secure является необязательным и используется для создания защищенного локального общего объекта. После создания любые последующие вызовы к защищенному локальному общему объекту должны быть сделаны SWF, доставленным по HTTPS.

Доступ / обновление локального общего объекта

Локальный общий объект может иметь много атрибутов. Например, данные клиента могут включать имя, возраст, адрес и идентификаторы заказа. Каждый из этих атрибутов представлен свойством свойства data Локального общего объекта. Эти значения могут быть доступны, обновлены или удалены.

// retrieve a reference to the existing Local Shared Object (customerData.sol)
var so:SharedObject = SharedObject.getLocal("customerData");

// accessing the values of the Local Shared Object
var name:String = so.data.name;
var age:int = so.data.age;

// updating the values of the Local Shared Object
so.data.name= "John Smith";
so.data.age = 23;
so.data.orderIds = [23456, 24444, 25432];

// a custom class must be registered and marked serializable using the [RemoteClass] metadata tag
var address:Address = new Address();
address.street = "125 Foo Lane";
so.data.address = address;

// deleting values of the Local Shared Object
delete so.data.age;
delete so.data.orderIds;

Сохранять локальный общий объект

Используйте метод flush () для немедленной записи локального общего объекта на компьютер пользователя.

public function flush(minDiskSpace:int = 0):String

Вызов flush () возвращает одно из двух возможных значений: SharedObjectFlushStatus.PENDING или SharedObjectFlushStatus.FLUSHED. Если на компьютере пользователя требуется больше места для сохранения локального общего объекта, возвращается SharedObjectFlushStatus.PENDING и пользователю предоставляется диалоговое окно для получения разрешения на выделение большего пространства.
Когда пользователь выбирает «Разрешить» или «Запретить», отправляется событие NetStatusEvent.NET_STATUS для локального общего объекта. Зарегистрируйте прослушиватель событий для обработки этого события.

so.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

Если локальный общий объект успешно записан на компьютер пользователя, SharedObjectFlushStatus.FLUSHED возвращается, а пользователь не уведомляется.

У метода flush () один параметр. Следует использовать следующим образом:

  • Параметр minDiskSpace является необязательным и используется для выделения дополнительного пространства (более 100 КБ) на компьютере пользователя для локального общего объекта. Если используется, пользователю предоставляется диалоговое окно, запрашивающее разрешение на выделение дополнительного пространства.

private function writeSharedObject():void
{
    var so:SharedObject = SharedObject.getLocal("mySO");
    so.data.name = "Jeremy Mitchell";
    try
    {
        // wrap in a try to handle a scenario where local storage has been disallowed
        so.flush(500000);
    }
    catch (e:Error)
    {
        trace("Local storage has been disabled for this domain");
    }
}


Примечание. Метод flush () не требуется для сохранения локального общего объекта.
Когда SWF-файл приложения закрывается, делается попытка сохранить все локальные общие объекты на компьютере пользователя. Однако, если для Локального общего объекта не выделено достаточное пространство, попытка завершится неудачно. Используйте метод flush () для обеспечения успеха и восстановления после любого возможного сбоя.

Удалить локальный общий объект

Чтобы очистить данные локального общего объекта и удалить его с компьютера пользователя, вызовите метод clear ().

public function clear():void

Например:

    var so:SharedObject = SharedObject.getLocal("loginInfo");  
    so.clear();