Cookies во Flex

7 views
Skip to first unread message

itERRatOR

unread,
Dec 17, 2007, 8:53:12 AM12/17/07
to ruFlex
Пробовал реализовать куки, используя ExternalInterface, так как это
показано в статье
http://yarovoy.com/2007/10/21/using_cookies_in_as3/
Однако после сбора проекта в билдере возникает следующая проблема:
Если запускать html (в которую встроена swf), то сообщение о том, что
куки отключены, не генерируется и более того, данные даже сохраняются
на протяжении сеанса.
Если запускать непосредственно swf-ку, то постоянно вылетает ошибка о
том, что куки недоступны

Сервер - IIS
Браузер - IE

Помогите пожалуйста довести пример из статьи до ума или предложите
другой способ, если кто знает!

Vooparker

unread,
Dec 17, 2007, 9:27:45 AM12/17/07
to ruf...@googlegroups.com
А что удивительно что при запуске флэшки локально вываливается исключение?
О том что куки отключены в браузере мы так же узнаем через ExternalInterface, см. статичный геттер cookiesEnabled
В идеале перед тем как прочесть или установить куки необходимо выполнить проверку
if(CookieManager.cookiesEnabled) {...}
--
Всех благ и удачи.
С уважением, Алексей "Vooparker" Аникутин.

itERRatOR

unread,
Dec 17, 2007, 9:40:39 AM12/17/07
to ruFlex
Я именно так и делаю. Но даже при отключенных cookies сообщения не
выдается

Vooparker

unread,
Dec 17, 2007, 9:50:16 AM12/17/07
to ruf...@googlegroups.com
Еще раз повторюсь, о том что куки отключены CookieManager спрашивает браузер. Попробуй ввести в адресной


On Dec 17, 2007 5:40 PM, itERRatOR <zamb...@mail.ru > wrote:
Я именно так и делаю. Но даже при отключенных cookies сообщения не
выдается



Vooparker

unread,
Dec 17, 2007, 9:51:59 AM12/17/07
to ruf...@googlegroups.com
Еще раз повторюсь, о том что куки отключены CookieManager спрашивает браузер. Попробуй ввести в адресной строке:
javascript:alert(navigator.cookieEnabled);

itERRatOR

unread,
Dec 17, 2007, 10:14:34 AM12/17/07
to ruFlex
Я прошу прощения за чрезмерное беспокойство, пример описан очень
подробно и обстоятельно, в нем все понятно и прозрачно, поэтому у меня
нет никаких сомнений, что он абсолютно верен. Похоже у меня проблемы с
браузером, поскольку куки не отключаются. Спасибо за оперативную
помощь! Весьма признателен!

Vooparker

unread,
Dec 17, 2007, 10:34:04 AM12/17/07
to ruf...@googlegroups.com
Как очень нехороший вариант определения того что куки включены: можно попробывать сохранить тестовую куку, тутже ее прочитать и сравнить значения. Но еще раз повторюсь это нехороший вариант.



On Dec 17, 2007 6:14 PM, itERRatOR <zamb...@mail.ru> wrote:
Я прошу прощения за чрезмерное беспокойство, пример описан очень
подробно и обстоятельно, в нем все понятно и прозрачно, поэтому у меня
нет никаких сомнений, что он абсолютно верен. Похоже у меня проблемы с
браузером, поскольку куки не отключаются. Спасибо за оперативную
помощь! Весьма признателен!

itERRatOR

unread,
Dec 18, 2007, 5:21:41 AM12/18/07
to ruFlex
Алексей, помоги, пожалуйста решить проблему. Я использую твой пример и
он мне очень помогает. Однако почему-то долговременное хранение
cookies в IE у меня не работает, в FireFox все нормально, в примере,
написанном на JavaScript запускаю под IE, тоже хранит столько, сколько
ему указываешь. А когда запускаю твой пример (там по сути тоже самое,
что и в JavaScript), то при следующем открытии окна IE куки уже не
видны. Подскажи, что я делаю не так?

On 17 дек, 17:34, Vooparker <voopar...@gmail.com> wrote:
> Как очень нехороший вариант определения того что куки включены: можно
> попробывать сохранить тестовую куку, тутже ее прочитать и сравнить значения.
> Но еще раз повторюсь это нехороший вариант.
>

Vooparker

unread,
Dec 18, 2007, 5:38:05 AM12/18/07
to ruf...@googlegroups.com
Не обещаю оперативной помощи =), но для начала было бы не плохо увидеть примеры кода как на JS так и AS, иначе мне сложно догадаться


On Dec 18, 2007 1:21 PM, itERRatOR < zamb...@mail.ru> wrote:
Алексей, помоги, пожалуйста решить проблему. Я использую твой пример и
он мне очень помогает. Однако почему-то долговременное хранение
cookies в IE у меня не работает, в FireFox все нормально, в примере,
написанном на JavaScript запускаю под IE, тоже хранит столько, сколько
ему указываешь. А когда запускаю твой пример (там по сути тоже самое,
что и в JavaScript), то при следующем открытии окна IE куки уже не
видны. Подскажи, что я делаю не так?

itERRatOR

unread,
Dec 18, 2007, 5:43:59 AM12/18/07
to ruFlex
Ну ок! Спасибо, что отозвался :)
CookieManager.store("userName", "SuperMegaAdminSiditVCookah", new
Date(new Date().getTime() + 1000*60*60*24*7));
реализация store 100% идентична той, которая описана в статье.

в JavaScript сохранение выглядит так:

pathname = location.pathname;
myDomain = pathname.substring(0,pathname.lastIndexOf('/')) +'/';
var largeExpDate = new Date ();
largeExpDate.setTime(largeExpDate.getTime() + (365 * 24 * 3600 *
1000));
SetCookie('username',"SuperMegaAdminSiditVCookah",largeExpDate,myDomain);

function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" +
expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}



On 18 дек, 12:38, Vooparker <voopar...@gmail.com> wrote:
> Не обещаю оперативной помощи =), но для начала было бы не плохо увидеть
> примеры кода как на JS так и AS, иначе мне сложно догадаться
>

itERRatOR

unread,
Dec 18, 2007, 6:40:27 AM12/18/07
to ruFlex
Опера ведет себя абсолютно аналогично IE :(

Vooparker

unread,
Dec 18, 2007, 6:55:24 AM12/18/07
to ruf...@googlegroups.com
Времени посмотреть причину подобного поведения пока нет, но навскидку стоит посмотреть на формат даты который передается строкой в JS, вполне возможно Опера и ИЕ не принимают формат формируемый AS в expires.toString() метода CookieManager.store, так он несколько отличается от строки возвращаемой expires.toGMTString() в JS. Могу посоветовать попробывать собрать строку в датой в AS по шаблону возвращаемому expires.toGMTString().


On Dec 18, 2007 2:40 PM, itERRatOR <zamb...@mail.ru> wrote:
Опера ведет себя абсолютно аналогично IE :(



itERRatOR

unread,
Dec 18, 2007, 8:01:15 AM12/18/07
to ruFlex
Спасибо, у меня тоже возникала аналогичная мысль

On 18 дек, 13:55, Vooparker <voopar...@gmail.com> wrote:
> Времени посмотреть причину подобного поведения пока нет, но навскидку стоит
> посмотреть на формат даты который передается строкой в JS, вполне возможно
> Опера и ИЕ не принимают формат формируемый AS в expires.toString() метода
> CookieManager.store, так он несколько отличается от строки возвращаемой
> expires.toGMTString() в JS. Могу посоветовать попробывать собрать строку в
> датой в AS по шаблону возвращаемому expires.toGMTString().
>

itERRatOR

unread,
Dec 18, 2007, 8:59:12 AM12/18/07
to ruFlex
Действительно, различие в форматах дат
Модифицируем пример статьи совсем чуть-чуть: expires.toString() ->
expires.toUTCString()
и все работает
Спасибо за оперативную помощь!
Весьма признателен :)

Vooparker

unread,
Dec 18, 2007, 9:21:18 AM12/18/07
to ruf...@googlegroups.com
Ну в довершение нашего диалога я думаю было б не плохо разместить здесь работающий вариант =) достаточно я думаю будет метода store


On Dec 18, 2007 4:59 PM, itERRatOR < zamb...@mail.ru> wrote:
Действительно, различие в форматах дат
Модифицируем пример статьи совсем чуть-чуть: expires.toString() ->
expires.toUTCString()
и все работает
Спасибо за оперативную помощь!
Весьма признателен :)



Yuriy Yarovoy

unread,
Dec 18, 2007, 9:36:49 AM12/18/07
to ruf...@googlegroups.com
Честно говоря, мне жаль, что это обсуждение велось в рассылке а не в комментариях к статье про CookieManager, потому что другие разработчики, прочитавшие статью, могут столкнуться с подобной проблемой. Считаю разумным в комментариях к статье разместить хотя бы ссылку на это обсуждение.

--
Yuriy Yarovoy
yury.y...@gmail.com || http://yarovoy.com

itERRatOR

unread,
Dec 19, 2007, 6:04:21 AM12/19/07
to ruFlex
Я разместил ссылку в комментариях к самой статье
Ну и для порядка "опубликую" здесьь тот код, который заработал у меня.

public static function store (name:String, value:String, expires:Date
= null,
path: String = null, domain: String = null, secure:Boolean =
false):void
{
if(!cookiesEnabled)
throw new Error("Cookies is disabled. Check if ExternalInterface is
available and cookies is enabled.");
var cookieString:String = name + "=" + escape(value);
if(expires != null) cookieString += "; expires=" +
expires.toUTCString();
if(path != null) cookieString += "; path=" + path;
if(domain != null) cookieString += "; domain=" + domain;
if(secure) cookieString += "; secure";
ExternalInterface.call("function(){document.cookie=\"" + cookieString
+ "\"}");
}

Как я уже и говорил, он почти не отличается от того, что есть в
статье.

Всем спасибо за помощь!
Юрий Яровой и Алексей Аникутин - спасибо ОГРОМНОЕ ;)

On 18 дек, 16:36, "Yuriy Yarovoy" <yury.yaro...@gmail.com> wrote:
> Честно говоря, мне жаль, что это обсуждение велось в рассылке а не в
> комментариях к статье про CookieManager, потому что другие разработчики,
> прочитавшие статью, могут столкнуться с подобной проблемой. Считаю разумным
> в комментариях к статье разместить хотя бы ссылку на это обсуждение.
>
> --
> Yuriy Yarovoy
> yury.yaro...@gmail.com ||http://yarovoy.com

Yuriy Yarovoy

unread,
Dec 19, 2007, 9:00:36 AM12/19/07
to ruf...@googlegroups.com
Спасибо, что прислушались к совету. Рассылка - это хорошо, но информацию в интернете нужно упорядочивать. Уменьшать, так сказать общий процент энтропии во Вселенной. ;-)


On Dec 19, 2007 2:04 PM, itERRatOR < zamb...@mail.ru> wrote:
Я разместил ссылку в комментариях к самой статье

Reply all
Reply to author
Forward
0 new messages