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

Я хочу получить значения файлов cookie для одного и того же домена во Flash-фильме. Это возможно?

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

Ответы на вопрос(7)

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

Больше информации здесь:http://www.permadi.com/tutorial/flashjscommand/

строки запроса:

For web applications, you can pass values to swf by url parameters, and (with action script inside swf) save them to the sandbox.

-памяти. Флэш-куки хранятся на вашем компьютере в каталоге с именем вашего домена. Эти каталоги расположены по адресу:

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

этостатья от Adobe это хорошее начало.

 21 сент. 2008 г., 01:03
Обратите внимание, что общие объектыnot куки, они работают более или менее одинаково, но SharedObjects являются специфичными для Flash.

у, ее будет проще получить в 10 раз.

import flash.net.*

var _loader:URLLoader = new URLLoader();
var _req:URLRequest = new URLRequest('https://stackoverflow.com');
_loader.addEventListener(Event.COMPLETE, _onComplete);
_loader.load(_req);

function _onComplete(e:Event):void{
    var wantedData:RegExp = /<div class="cool-data">(.*?)</div>/ig;
    var result:Object = wantedData.exec(String(_loader.data));
    trace(result[0].split('<div class="cool-data">').join('')
                   .split('</div>').join(''));

}
Решение Вопроса

вы, вероятно, захотите использовать класс SharedObject. УвидетьСсылка на SharedObject от Adobe для более подробной информации об этом.

Если вы хотите получить доступ к файлам cookie HTTP, вам потребуется использовать 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, используя & apos; allowScriptAccess & apos; параметр в вашем флеш-объекте.

Затем вам нужно создать пару функций 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 во флеш-проекте и HTTPCookies.js загружен с веб-страницы, вы сможете вызывать getCookie и setCookie из вашего флеш-фильма, чтобы получить или установить HTTP-куки.

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

 07 окт. 2008 г., 14:09
Хороший вопрос - исправлено. Спасибо!
 01 окт. 2008 г., 20:39
Как флэш-код на самом деле получает возвращаемое значение вызова js getCookie ()? В вашем AS-коде нет возврата. Должен ли он просто возвращать результат вызова ExternalInterface?

return & quot; заявление.

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);    
  }
}

е использовать getURL для вызова функции javascript.

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

Ваш ответ на вопрос