Is it possible to store cookies in Flash or Flex?

In PHP there is a function setcookiebased on its storage. Is this possible in Flash ?. If possible, then how? I want to keep the value.

+3
source share
3 answers

First of all: PHP runs on the server and therefore can send the necessary HTTP header to set the cookie, Flash runs in the client’s browser and, therefore, cannot do the same.

However, it is possible to access and store cookies from flash / flex by using a function flash.external.ExternalInterfaceand calling JavaScript to receive and set cookies.

I developed a class for this very easily:

package de.slashslash.util {

    import flash.external.ExternalInterface;

    /**
     * The Cookie class provides a simple way to create or access
     * cookies in the embedding HTML document of the application.
     * 
     */
    public class Cookie {

        /**
         * Flag if the class was properly initialized.
         */
        private static var _initialized:Boolean = false;

        /**
         * Name of the cookie.
         */
        private var _name:String;

        /**
         * Contents of the cookie.
         */
        private var _value:String;

        /**
         * Flag indicating if a cookie was just created. It is <code>true</code>
         * when the cookie did not exist before and <code>false</code> otherwise.
         */
        private var _isNew:Boolean;

        /**
         * Name of the external javascript function used for getting
         * cookie information.
         */
        private static const GET_COOKIE:String = "cookieGetCookie";

        /**
         * Name of the external javascript function used for setting
         * cookie information.
         */
        private static const SET_COOKIE:String = "cookieSetCookie";

        /**
         * Javascript code to define the GET_COOKIE function.
         */
        private static var FUNCTION_GET_COOKIE:String =
            "function () { " +
                "if (document." + GET_COOKIE + " == null) {" +
                    GET_COOKIE + " = function (name) { " + 
                        "if (document.cookie) {" + 
                            "cookies = document.cookie.split('; ');" + 
                            "for (i = 0; i < cookies.length; i++) {" + 
                                "param = cookies[i].split('=', 2);" + 
                                "if (decodeURIComponent(param[0]) == name) {" + 
                                    "value = decodeURIComponent(param[1]);" + 
                                    "return value;" + 
                                "}" + 
                            "}" + 
                        "}" + 
                        "return null;" + 
                    "};" +
                "}" +
            "}";

        /**
         * Javascript code to define the SET_COOKIE function.
         */
        private static var FUNCTION_SET_COOKIE:String =
            "function () { " +
                "if (document." + SET_COOKIE + " == null) {" +
                    SET_COOKIE + " = function (name, value) { " + 
                        "document.cookie = name + '=' + value;" + 
                    "};" +
                "}" +
            "}";

        /**
         * Initializes the class by injecting javascript code into
         * the embedding document. If the class was already initialized
         * before, this method does nothing.
         */
        private static function initialize():void {
            if (Cookie._initialized) {
                return;
            }

            if (!ExternalInterface.available) {
                throw new Error("ExternalInterface is not available in this container. Internet Explorer ActiveX, Firefox, Mozilla 1.7.5 and greater, or other browsers that support NPRuntime are required.");
            }

            // Add functions to DOM if they aren't already there
            ExternalInterface.call(FUNCTION_GET_COOKIE);
            ExternalInterface.call(FUNCTION_SET_COOKIE);

            Cookie._initialized = true;
        }

        /**
         * Creates a new Cookie object. If a cookie with the specified
         * name already exists, the existing value is used. Otherwise
         * a new cookie is created as soon as a value is assigned to it.
         * 
         * @param name The name of the cookie
         */
        public function Cookie(name:String) {
            Cookie.initialize();

            this._name = name;
            this._value = ExternalInterface.call(GET_COOKIE, name) as String;

            this._isNew = this._value == null;
        }

        /**
         * The name of the cookie.
         */
        public function get name():String {
            return this._name;
        }

        /**
         * The value of the cookie. If it is a new cookie, it is not
         * made persistent until a value is assigned to it.
         */
        public function get value():String {
            return this._value;
        }

        /**
         * @private
         */
        public function set value(value:String):void {
            this._value = value;

            ExternalInterface.call(SET_COOKIE, this._name, this._value);
        }

        /**
         * The <code>isNew</code> property indicates if the cookie
         * already exists or not.
         */
        public function get isNew():Boolean {
            return this._isNew;
        }
    }
}
+9

. Flash 100 ( ) . cookie Flash ( cookie ). , , Flash .

API SharedObject AS3: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/SharedObject.html

googling "Flash SharedObject"

, , SharedObjects. , .

!

+6

:


import flash.net.SharedObject;

// get/create the shared object with a unique name.
// If the shared object exists this grab it, if not
// then it will create a new one
var so: SharedObject = SharedObject.getLocal("UniqueName");

// the shared object has a propery named data, it's
// an object on which you can create, read, or modify
// properties (you can't set the data property itself!)
// you can check to see if it already has something set
// using hasOwnProperty, so we'll check if it has a var
// use it if it does, or set it to a default if it doesn't
if (so.data.hasOwnProperty("theProp"))
{
    trace("already has data! It reads: " + so.data.theProp);
}
else
{
    so.data.theProp = "default value";
    so.flush(); // flush saves the data
    trace("It didn't have a value, so we set it.");
}

, , :)

+3

Source: https://habr.com/ru/post/1705457/


All Articles