Вступления
Приветствую жителей хабры!
Часто бывает случаи, где нас обязывают сохранять данные над которыми работает пользователь во Flash (очки игры, оформления рабочей области и т.д.).
Многие думают что нужно создавать мост между PHP и Flash. В некоторых случаях это нужно делать, для того чтобы хранить долгое время в сети данные о тех или иных действиях пользователя. Но иногда требуется на стороне клиента сохранить данные, которые предназначены только для определения того, какую функцию пользователь выбрал и в зависимости от этого предоставить ему нужную информацию. Мы сегодня рассмотрим сохранения данных на компьютере, а именно Local Shared Object (далее LSO), что в народе иногда звется флеш куки.

Немного о технологии
Local Shared Objects — обычно называемый Flash cookie, это тип данных, хранящихся в виде файла на компьютере пользователя. На данный момент все версии Flash Player используют LSO.
Обычно с настройками по-умолчанию, Flash запрашивает у пользователя разрешения о хранении локальных файлов на компьютере. Уверен многие это видели, так что некоторые из читателей уже понимают о чем я здесь пишу. Как и с обычными cookie, онлайн банки, рекламодатели или торговцы могут использовать LSO для целей учета и контроля. Flash cookie не могут быть использованы третьими лицами на других сайтах. К примеру, LSO от сайта “www.site.ru” не могут быть прочитаны сайтом “www.site.com”.
Если пользователь избавляется от cookie сайта, то уникальный ID-cookie будет присвоен новому файлу, используя данные Flash в качестве “резервного копирования”.
Пользователь может отказаться от хранения LSO используя глобальные настройки параметров хранения в Setting Manager на официальном сайте Adobe.

Хранения LSO на компьютере
Расположения файлов LSO по-умолчанию, обычно зависит от операционной системы. LSO хранятся на компьютере под форматом “.SOL”.
Windows 7:
AppData/Roaming/Macromedia/#SharedObjects/
Linux:
~/.macromedia/Flash_player/
Mac OS X:
~ / Library / Preferences / Macromedia / Flash Player / # SharedObjects
От теории к практике
Я подготовил небольшой пример на ActionScript3, для того чтобы вы могли увидеть, как работать с LSO в “реальных условиях”.
Мой пример являет собой сцену на которой расположены:
- две кнопки с именами butt и butt1 ;
- полe ввода с именем texts ;
- палитра цветов — pal ;
- текстовое поле — label ;
- а также MovieClip — fon .
Кнопки служат нам для того, чтобы очищать и заносить данные в переменные, а также сохранять их в cookie.
Поле ввода используются для того, чтобы пользователь мог ввести данные, которые хочет занести в переменную, а с помощью палитры цветов выбрать цвет фона нашей сцены.
import fl.events.ColorPickerEvent;
import flash.geom.ColorTransform;
import flash.events.MouseEvent;
var Save:SharedObject;
Save = SharedObject.getLocal(«application-name»);
label.text =«Строка: '» + Save.data.save1 + "'";
pal.selectedColor = Save.data.save2;
var color:ColorTransform = fon.transform.colorTransform;
fon.addEventListener(ColorPickerEvent.CHANGE, col);
butt.addEventListener(MouseEvent.CLICK, ok);
butt1.addEventListener(MouseEvent.CLICK, ex);
function ok(e:MouseEvent):void
{
Save.data.save1 =«Вы вернулись » + texts.text;
label.text = «Привет »+texts.text;
}
function ex(e:MouseEvent):void
{
delete Save.data.save1;
label.text = «Exit»;
}
function col(e:ColorPickerEvent):void
{
Save.data.save2 = color.color = pal.selectedColor;
fon.transform.colorTransform = color;
}

Вывод
Вот и подошли мы к концу нашего эксперимента и теперь можем смело сказать, что не стоит боятся такой штуковины как Local Shared Objects.
После проделанной работы, я сразу зашел в папку где хранятся cookie. Свой же я нашел в папочке localhost, а в нем файл application-name.sol.
Открыв его увидел следующие:
ї QTCSO application-name save2Ѓ save1=Р’С‹ вернулись Ruslan
Комментарий от Emin
Крайне желательно использовать метод flush() для принудительного сохранения. Чтобы не возникало проблем при обращении к данным.
До 100 КБ Flash не запрашивает разрешение о хранении. Если больше 100 КБ, то тогда появляется запрос.
Всем спасибо за то что прочитали мою статью!