Как получить доступ к файлам cookie в Flash?

Я ищу, чтобы захватить значения cookie для того же домена в Flash-ролике. Возможно ли это?

Посмотрим, что я разрешаю пользователю задавать переменную foo, и я храню ее с помощью любого языка веб-программирования. Я могу легко получить доступ к этому языку, но я хотел бы получить к нему доступ через Flash-видео, не передавая его, распечатывая его на странице HTML.

Ответ 1

Если вы хотите хранить и извлекать данные, вы, вероятно, захотите использовать класс SharedObject. Подробнее об этом см. ссылка на Adobe SharedObject.

Если вы хотите получить доступ к HTTP файлам cookie, вам нужно использовать ExternalInterface для разговора с javascript. То, как мы это делаем, состоит в том, чтобы иметь вспомогательный класс, называемый HTTPCookies.

HTTPCookies.as:

import flash.external.ExternalInterface;

public class HTTPCookies
{
    public static function getCookie(key:String):*
    {
        return ExternalInterface.call("getCookie", key);
    }

    public static function setCookie(key:String, val:*):void
    {
        ExternalInterface.call("setCookie", key, val);
    }
}

Вам нужно убедиться, что вы включили javascript, используя параметр 'allowScriptAccess' в своем Flash-объекте.

Затем вам нужно создать пару javascript-функций, getCookie и setCookie, следующим образом (с благодарностью quirksmode.org)

HTTPCookies.js:

function getCookie(key)
{
    var cookieValue = null;

    if (key)
    {
        var cookieSearch = key + "=";

        if (document.cookie)
        {
            var cookieArray = document.cookie.split(";");
            for (var i = 0; i < cookieArray.length; i++)
            {
                var cookieString = cookieArray[i];

                // skip past leading spaces
                while (cookieString.charAt(0) == ' ')
                {
                    cookieString = cookieString.substr(1);
                }

                // extract the actual value
                if (cookieString.indexOf(cookieSearch) == 0)
                {
                    cookieValue = cookieString.substr(cookieSearch.length);
                }
            }
        }
    }

    return cookieValue;
}

function setCookie(key, val)
{
    if (key)
    {
        var date = new Date();

        if (val != null)
        {
            // expires in one year
            date.setTime(date.getTime() + (365*24*60*60*1000));
            document.cookie = key + "=" + val + "; expires=" + date.toGMTString();
        }
        else
        {
            // expires yesterday
            date.setTime(date.getTime() - (24*60*60*1000));
            document.cookie = key + "=; expires=" + date.toGMTString();
        }
    }
}

Как только у вас есть HTTPCookies.as в вашем Flash-проекте и HTTPCookies.js, загруженные с вашей веб-страницы, вы сможете вызвать getCookie и setCookie из своего флеш-ролика, чтобы получить или установить HTTP файлы cookie.

Это будет работать только для очень простых значений - строк или чисел - но для чего-то более сложного вы действительно должны использовать SharedObject.

Ответ 2

Я считаю, что флеш-объекты имеют функции, доступные через javascript, поэтому, если нет более простого способа, вы могли бы по крайней мере использовать обработчик onload javascript и передать document.cookie в ваше флеш-приложение извне.

Дополнительная информация здесь: http://www.permadi.com/tutorial/flashjscommand/

Ответ 3

Вы можете читать и записывать файлы cookie (локальный общий объект) со вспышки. Файлы cookie Flash хранятся на вашем компьютере в каталоге с именем вашего домена. Эти каталоги расположены по адресу:

[Root drive]:\Documents and Settings\[username]\Application Data\Macromedia\Flash Player\#SharedObjects\

Этот article из Adobe - хороший старт.

Ответ 4

Некоторые GoogleGogling показывают, что это можно сделать, используя строки запроса:

Для веб-приложений вы можете пройти значениям swf по параметрам url и (с действием script внутри swf) save их в песочницу.

Ответ 5

cookie доступны для javascript через document.cookie - попробуйте использовать flash getURL для вызова функции javascript.

getURL('javascript:document.cookie = "varname=varvalue; expires=Thu, 2 Aug 2001 20:47:11 UTC; path="');

Ответ 6

Метод getCookie в HTTPCookies.as должен использовать оператор return.

import flash.external.ExternalInterface;
public class HTTPCookies
{    
  public static function getCookie(key:String):*   
  {
        return ExternalInterface.call("getCookie", key);    
  }
  public static function setCookie(key:String, val:*):void 
  {
        ExternalInterface.call("setCookie", key, val);    
  }
}