22. [junior] SharedObject – флешовые “куки”

junior – серия статей для начинающих ActionScript-разработчиков.
Все статьи серии:
http://flashpress.ru/blog/category/junior/

В играх(и не только) часто возникает необходимость где то сохранить не очень важную информацию, вроде пользовательских настроек. Нужно ли засорять сервере локальной информацией? Не всегда. Да и к тому же если у вас вообще нет сервера, тогда на помощь приходит класс SharedObject. С его помощью можно сохранить любую информацию на локальный диск пользователя.
Но есть некоторые ограничения:

  1. Данные сохраняются только в специальном системном каталоге
  2. Данные сохраненные из одной флешки нельзя прочитать в другой. Если флешки называются одинаково, на загружены с разных доменов/поддоменов – они считаются разными
  3. По умолчанию флешка разрешает сохранять только 100кб. В случае превышения этого объема, флешка выдаст пользователю соответствующее сообщение с возможностью запретить сохранение или увеличить объем хранилища.
Есть и небольшой минус, при сохранении информации через SharedObject флешка часто подвисает на доли секунды. Поэтому если ваша игра работает в режиме realtime, постарайтесь не сохранять ничего в момент активных действий в игре. Сохранение можно отложить, но не забывайте что если данные не сохранить и пользователь обновит/закроет страницу, данные будут безвозвратно утеряны.

Напишите текст в этой флешка и перезагрузите страницу, вы увидите текст набранный вами ранее.

Здесь должна быть флешка. Установите Flash Player

Вот собственно ActionScript-код флешки:

Класс FPShared

Для удобства работы с хранилищем я написал класс FPShared. Он имеет статические методы, для доступа к хранилищу из любой точки приложения:

FPShared.Has(name:String):Boolean // Проверить наличие параметра в глобальном хранилище

FPShared.Save(name:String, value:*, now:Boolean=false):void // Сохранить параметр в глобальном хранилище

Если в вашем приложении необходимо использовать несколько разных хранилищ, вы можете создать экземпляр класса FPShared передав в конструкторе уникальное имя для хранилища:

В конструкторе вторым параметром saveTimeout:int передается время задержки(в миллисекундах) при сохранении. В методе Save третий параметр now:Boolean означает что сохранить данные нужно немедленно, не зависимо от параметра saveTimeout.

SharedObject и куки

В заголовке страницы слово куки я взял в кавычки, потому что SharedObject это не совсем куки в привычном понимании для HTML/JavaScript программиста. Если вы сохраните информацию в SharedObject, то вы не сможете прочитать её из HTML/JS. Если вы хотите использовать стандартные куки, воспользуйтесь класса ExternalInterface. С его помощью можно вызвать JavaScript метод который вернет существующую или сохранит вашу куку. Подробно про ExternalInterface можно почитать в статье.

Скачать библиотеку FPShared можно здесь, а почитать документацию здесь.
Примеры статьи здесь.

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 1254 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress: