如何在Flash中访问Cookie?

时间:2008-09-20 22:09:50

标签: flash actionscript cookies

我希望在Flash电影中抓取同一域的Cookie值。这可能吗?

让我们看看我让用户设置变量foo并使用任何Web编程语言存储它。我可以通过该语言轻松访问它,但我希望通过Flash电影访问它,而不通过在HTML页面中打印它来传递它。

7 个答案:

答案 0 :(得分:11)

如果您只想存储和检索数据,则可能需要使用SharedObject类。有关详细信息,请参阅Adobe's SharedObject reference

如果要访问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);
    }
}

您需要确保使用flash对象中的'allowScriptAccess'参数启用javascript。

然后你需要创建一对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();
        }
    }
}

在您的Flash项目中安装了HTTPCookies.as,并从您的网页加载了HTTPCookies.js后,您应该可以从Flash电影中调用getCookie和setCookie来获取或设置HTTP Cookie。

这只适用于非常简单的值 - 字符串或数字 - 但对于任何更复杂的事情,你应该使用SharedObject。

答案 1 :(得分:0)

我相信flash对象具有可通过javascript访问的功能,因此如果没有更简单的方法,您至少可以使用javascript onload处理程序并将document.cookie从外部传递到您的Flash应用程序中。

此处有更多信息:http://www.permadi.com/tutorial/flashjscommand/

答案 2 :(得分:0)

您可以从Flash读取和写入Cookie(本地共享对象)。 Flash Cookie存储在您的PC上的域名目录中。这些目录位于:

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

来自Adobe的article是一个良好的开端。

答案 3 :(得分:0)

一些Google搜索显示可以使用query strings

来完成
  

对于Web应用程序,您可以通过   通过url参数将值赋予swf,以及   (在swf中使用动作脚本)保存   他们到了沙箱。

答案 4 :(得分:0)

通过document.cookie可以通过javascript获取cookie - 尝试使用flash的getURL来调用javascript函数。

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

答案 5 :(得分:0)

HTTPCookies.as中的

getCookie方法应该使用“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);    
  }
}

答案 6 :(得分:0)

我已经晚了10年。如果您可以在页面中嵌入所需的数据,那么抓取它的次数会轻松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(''));

}