SharedObject і ActionScript 3.0
Як уже згадувалося. в ActionScript для зберігання даних на комп'ютері користувача або сервері використовується клас SharedObject ( "спільно використовуваний об'єкт" або "загальний об'єкт"). При цьому загальні об'єкти існують двох різновидів:
1.) Віддалені загальні об'єкти (Remote Shared Objects. RSO), які в своїй роботі використовують серверні технології.
2.) Локальні спільно використовувані об'єкти (Local Shared Objects. LSO), які зберігають дані безпосередньо на комп'ютері клієнта.
Об'єкти LSO зберігаються в спеціальному каталозі на комп'ютері користувача у вигляді двійкових файлів з розширенням .sol. Шлях до цих файлів залежить від використовуваної OC, а самі файли можуть бути прихованими. Але якщо ми все ж знайдемо шукану папку і файл, то побачимо приблизно наступне:
Важливим моментом є те, що розміри 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 =; // зберігаємо об'єкт / * Флеш-плеєр автоматично зберігає дані 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. Збірник рецептів." пропонує конструкцію наступного виду:
Для того, щоб очистити локальний загальний об'єкт від збереженої в ньому інформації, досить викликати метод clear ():
LSO досить зручний механізм для зберігання інформації на стороні клієнта. Головні його переваги:
- зберігання великих обсягів інформації;
- зберігання інформації без обмежень за часом (як в куки);
- зберігання разнотипной інформації.
Є й недоліки. Головний недолік локальних загальних об'єктів для флеш-розробників - повна залежність від волі користувача, який може навіть заборонити використання LSO своїм флеш-плеєром. Втім, це суб'єктивна думка :-)