Про загальні об'єктах
Загальні об'єкти функціонують подібно файлам cookie браузера. Клас SharedObject використовується для зберігання даних на жорсткому диску користувача та виклику цих даних під час того ж або наступного сеансу. Додатки мають доступ тільки до власних даних SharedObject і тільки при їх запуску на одному і тому ж домені. Дані не надсилаються на сервер і недоступні для додатків, що запускаються на інших доменах, проте доступні для додатків того ж домена.
Порівняння загальних об'єктів з файлами cookie
У файлів cookie і загальних об'єктів існує багато спільного. Так як більшість веб-програмістів знайомі з принципом роботи файлів cookie, корисним буде порівняти файли cookie з локальними об'єктами SharedObjects.
Як правило, файли cookie, що відповідають стандарту RFC 2109, мають такі властивості:
термін дії, дія якого закінчується за замовчуванням в кінці сеансу;
максимальна загальна кількість файлів cookie, рівне 300, але не більше 20 файлів для одного сайту;
розмір файлу обмежений 4 Кб;
іноді розцінюються як загроза безпеки, в результаті чого можливо їх відключення на клієнтському комп'ютері;
папка збереження вказується браузером клієнта;
передача від клієнта на сервер відбувається за допомогою HTTP.
На відміну від файлів cookie, загальні файли мають такі властивості:
відсутність терміну дії за замовчуванням;
розмір файлу за замовчуванням обмежений 100 Кб;
можливість збереження простих типів даних (наприклад, String, Array і Date).
папка збереження вказується додатком (в початковому каталозі користувача);
передача від клієнта на сервер відсутній.
Про клас SharedObject
За допомогою класу SharedObject можна створювати і видаляти загальні об'єкти, а також визначати поточний розмір використовуваного об'єкта SharedObject.
Створення спільних об'єктів
Для створення об'єкта SharedObject використовується метод SharedObject.getLocal () з наступним синтаксисом:
У наступному прикладі описується процес створення загального об'єкта з ім'ям mySO:
Таким чином на комп'ютері клієнта створюється файл з ім'ям preferences.sol.
Поняття local вказує на місце розташування загального об'єкта. В цьому випадку Adobe® Flash® Player зберігає файл SharedObject в локальному початковому каталозі клієнта.
При створенні загального об'єкта Flash Player створює новий каталог для програми та домену в ізольованому середовищі. Також створюється файл * .sol, який зберігає дані SharedObject. Каталогом за замовчуванням є підкаталог початкового каталогу користувача. У наступній таблиці представлені можливе розташування каталогу за замовчуванням:
Під ім'ям каталогу #SharedObjects мається на увазі каталог з довільним ім'ям. Далі слід каталог, ім'я якого ідентично імені хоста, далі - шлях до програми і, нарешті, файл * .sol.
Наприклад, при запиті додатка з ім'ям MyApp.swf, що знаходиться на локальному хості в підкаталозі з ім'ям / sos, Flash Player зберігає файл * .sol за наступним шляхом (для Windows XP):
Примітка. Якщо ім'я в методі SharedObject.getLocal () не вказано. Flash Player привласнює файлу ім'я undefined.sol.
За замовчуванням Flash може локально зберігати постійні об'єкти SharedObject розміром до 100 Кб в кожному домені. Це значення може змінюватися користувачем. При спробі збереження додатком даних в загальному об'єкті, що збільшує його до розміру більш 100 Кб, Flash Player відображає діалогове вікно «Локальне збереження», в якому користувач може дозволити або заборонити використання декількох локальних сховищ доменом, запращівающім доступ.
визначення шляху
Існує можливість використання необов'язкового параметра pathname для вказівки місця розташування файлу SharedObject. Цей файл повинен бути підкаталогом папки SharedObject даного домену. Наприклад, при запиті додатка на локальному хості і введенні наступного рядка:
Flash Player записує файл SharedObject в каталог / # localhost (або в каталог / localhost, якщо додаток є офлайн-додатком). Використання даної можливості найбільш виправдано при необхідності доступу декількох додатків до одного і того ж загального об'єкту. У цьому випадку клієнт може запустити два додатки Flex, в кожному з яких вказано шлях до загального об'єкту, що знаходиться в корені домену; після цього клієнт отримає доступ з обох додатків до одного і того ж загального об'єкту. Для спільного використання даних додатками, що не забезпечують незмінність даних, можна використовувати об'єкт LocalConnection.
При введенні неіснуючого каталогу Flash Player не створює файл SharedObject.
Додавання даних до загального об'єкту
У файл * .sol SharedObject можна додавати дані, використовуючи властивість data об'єкта SharedObject. Для додавання нових даних до загального об'єкту використовуйте наступний синтаксис:
У наступному прикладі виконується додавання властивостей userName. itemNumbers і adminPrivileges. а також їх значень, до SharedObject:
Після присвоєння значень властивості data Flash Player повинен виконати запис цих значень в файл SharedObject. Для ініціювання записи значень в файл SharedObject використовуйте метод SharedObject. flush (). наприклад:
Якщо користувач не викликає метод SharedObject.flush (). Flash Player записує значення в файл при виході з програми. Однак такий спосіб не дозволяє користувачеві збільшувати обсяг пам'яті, доступний, в якому Flash Player зберігає дані, якщо вони під час запису перевищують стандартні параметри. Тому рекомендується викликати метод SharedObject.flush ().
При використанні методу flush () для запису загальних об'єктів на жорсткий диск користувача слід дотримуватися обережності і перевіряти, чи не заборонив користувач локальне зберігання з допомогою менеджера параметрів Flash Player Settings Manager (www.macromedia.com/support/documentation/ru/flashplayer/help /settings_manager07.html), як показано в наступному прикладі.
Збереження об'єктів в загальних об'єктах
Прості об'єкти, наприклад, Arrays або Strings, можуть зберігатися у властивості SharedObject data.
У наступному прикладі представлений клас ActionScript, який визначає методи, які керують взаємодією із загальним об'єктом. Ці методи дозволяють користувачеві додавати і видаляти об'єкти із загальних об'єктів. В даному класі зберігається клас ArrayCollection, що містить прості об'єкти.
Збереження об'єктів із суворим контролем типів в загальних об'єктах
Існує можливість збереження примірників ActionScript із суворим контролем типів в загальних об'єктах. Дана можливість здійснюється за допомогою виклику методу flash.net.registerClassAlias () для реєстрації класу. При створенні екземпляра класу, збереженні його в елементі даних загального об'єкта і подальшому виведенні даних користувач отримає примірник із суворим контролем типів. За замовчуванням властивість SharedObject objectEncoding підтримує кодування AMF3 і витягує збережений екземпляр з об'єкта SharedObject. Збережено екземпляр зберігає той же тип, який був зазначений при виклику методу registerClassAlias ().
(Тільки для iOS) Запобігання резервоного копіювання локальних загальних об'єктів в хмарне сховище
Створення декількох загальних об'єктів
Є можливість створення декількох спільних об'єктів для однієї програми Flex. Для цього кожному об'єкту потрібно присвоїти унікальне ім'я екземпляра, наприклад:
Таким чином в локальному каталозі додатки Flex створюються файли preferences.sol і history.sol.
Створення захищеного примірника SharedObject
Коли створюється локальний або віддалений екземпляр SharedObject за допомогою методу getLocal () або getRemote (). існує додатковий параметр з ім'ям secure. який визначає, чи дозволений доступ до спільного об'єкту тільки для SWF-файлів, доставлених через HTTPS-з'єднання. Якщо даний параметр має значення true і SWF-файл доставляється через HTTPS, програвач Flash Player створює новий захищений загальний об'єкт або отримує посилання на існуючий захищений загальний об'єкт. Даний захищений загальний об'єкт може зчитуватися або записуватися тільки тими SWF-файлами, доставленими по протоколу HTTPS, які викликають метод SharedObject.getLocal () з параметром secure, які мають значення true. Якщо даний параметр має значення false і SWF-файл передається через HTTPS, програвач Flash Player створює новий загальний об'єкт або отримує посилання на існуючий загальний об'єкт.
Цей загальний об'єкт може зчитуватися або записуватися SWF-файлами, доставленими НЕ через HTTPS-підключення. Якщо SWF-файл доставляв через підключення HTTPS і ви намагаєтеся встановити для даного параметра значення true. то створення нового спільного об'єкта (або доступ до раніше створеного захищеному загальному об'єкту) завершиться збоєм, буде видано повідомлення про помилку, а загальний об'єкт отримає значення null. Якщо ви спробуєте виконати наступний код не через підключення по протоколу HTTPS, метод SharedObject.getLocal () видасть помилку.
Незалежно від значення даного параметра створені спільні об'єкти додаються до загального обсягу дискового простору, доступного для домену.
Відображення вмісту загального об'єкта
У загальних об'єктах значення зберігаються у властивості data. Відобразити кожне значення в екземплярі SharedObject можна за допомогою циклу for..in. як в наступному прикладі.
Видалення загальних об'єктів
Для знищення SharedObject у клієнта використовуйте метод SharedObject.clear (). Даний метод не видалить каталоги з шляху, встановленого за замовчуванням для загальних об'єктів програми.
Приклад ілюструє видалення файлу SharedObject з клієнтського комп'ютера:
приклад SharedObject
У наступному прикладі демонструється можливість зберігання простих об'єктів, таких як об'єкт Date, в об'єкті SharedObject SharedObject без ручної сериализации і десеріалізациі цих об'єктів.
Наступний приклад починається з вітання користувача як відвідувача, що пройшов першу реєстрацію. При натисканні кнопки «Вихід» додаток зберігає поточну дату в загальному об'єкті. При наступному запуску цього додатка або оновленні сторінки на екран виводиться привітання з повідомленням про час виходу з програми.
Для того, щоб побачити додаток в дії, запустіть додаток, натисніть кнопку «Вихід», після чого поновіть сторінку. Додаток відобразить дату і час останнього натискання кнопки «Вихід». Збережену інформацію можна видалити в будь-який час за допомогою кнопки «Видалити локальний загальний об'єкт».