Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I access cookies within Flash?

I'm looking to grab cookie values for the same domain within a Flash movie. Is this possible?

Let's see I let a user set a variable foo and I store it using any web programming language. I can access it easily via that language, but I would like to access it via the Flash movie without passing it in via printing it within the HTML page.

like image 886
Chris Bartow Avatar asked Sep 20 '08 22:09

Chris Bartow


People also ask

How do I view Flash cookies?

Change your Flash preferences To remove existing site cookies go to the Adobe Website Storage Settings Panel, where will you see a list of Flash cookies on your computer.

Where are Adobe Flash cookies stored?

Flash cookies are not stored in the user's browser file. They are stored in Adobe files which can be managed using Adobe Flash settings.

Do Flash cookies still exist?

Adobe ended its Flash Player product, but you might still find flash cookies out in the wild. Here's how to get rid of them. Flash-based websites will invariably plant flash cookies (also called Locally Shared Objects or LSOs) on your computer.


1 Answers

If you just want to store and retrieve data, you probably want to use the SharedObject class. See Adobe's SharedObject reference for more details of that.

If you want to access the HTTP cookies, you'll need to use ExternalInterface to talk to javascript. The way we do that here is to have a helper class called 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);
    }
}

You need to make sure you enable javascript using the 'allowScriptAccess' parameter in your flash object.

Then you need to create a pair of javascript functions, getCookie and setCookie, as follows (with thanks to 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();
        }
    }
}

Once you have HTTPCookies.as in your flash project, and HTTPCookies.js loaded from your web page, you should be able to call getCookie and setCookie from within your flash movie to get or set HTTP cookies.

This will only work for very simple values - strings or numbers - but for anything more complicated you really should be using SharedObject.

like image 188
Simon Avatar answered Sep 19 '22 15:09

Simon