Как я получаю доступ к cookie в Flash?

Это может быть связано с выравниванием и заполнением байт, чтобы структура выходила на четное количество байтов (или слов) на вашей платформе. Например, в C на Linux следующие 3 структуры:

#include "stdio.h"


struct oneInt {
  int x;
};

struct twoInts {
  int x;
  int y;
};

struct someBits {
  int x:2;
  int y:6;
};


int main (int argc, char** argv) {
  printf("oneInt=%zu\n",sizeof(struct oneInt));
  printf("twoInts=%zu\n",sizeof(struct twoInts));
  printf("someBits=%zu\n",sizeof(struct someBits));
  return 0;
}

У членов, размер которых (в байтах) равен 4 байтам (32 бита), 8 байтам (2x 32 бита) и 1 байт (2 +6 бит) соответственно. Вышеупомянутая программа (в Linux с использованием gcc) печатает размеры 4, 8 и 4, где последняя структура дополняется так, что это одно слово (4 x 8 бит байтов на моей 32-битной платформе).

oneInt=4
twoInts=8
someBits=4
10
задан Chris Bartow 20 September 2008 в 22:54
поделиться

6 ответов

Если Вы просто хотите сохранить и получить данные, Вы, вероятно, хотите использовать класс 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 с помощью 'allowScriptAccess' параметра в объекте флэш-памяти.

Затем необходимо создать пару функций 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 из фильма флэш-памяти, чтобы получить или установить cookie HTTP.

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

11
ответ дан 4 December 2019 в 01:03
поделиться

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

Более подробная информация: http://www.permadi.com/tutorial/flashjscommand/

0
ответ дан 4 December 2019 в 01:03
поделиться

Можно считать и записать cookie (Локальный общий объект) из флэш-памяти. Флэш-куки хранятся на Вашем ПК в рамках каталога с названием Вашего домена. Те каталоги расположены в:

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

Эта статья от Adobe является хорошим началом.

0
ответ дан 4 December 2019 в 01:03
поделиться

cookie доступны JavaScript через document.cookie - пытаются использовать getURL флэш-памяти для вызывания функции JavaScript.

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

0
ответ дан 4 December 2019 в 01:03
поделиться

Некоторый поиск с помощью Google показывает, что может быть сделан при помощи строк запроса:

Для веб-приложений можно передать значения swf параметрами URL, и (со сценарием действия внутри swf) сохраняют их к песочнице.

0
ответ дан 4 December 2019 в 01:03
поделиться

метод getCookie в 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);    
  }
}
0
ответ дан 4 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: