views:

2176

answers:

3

In php setcookie function based to store it . but flash is it possible ?. if it is possible then how ?. Plz help ... because i want to store value ...

+3  A: 

Yes. Flash applications can store up to 100kb of data (by default) on a user's computer. This is stored in Flash cookies (Separate from browser cookies). Users can adjust how much applications can store by right clicking on a flash application and going to settings.

Here is the SharedObject API for AS3: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/SharedObject.html

You can get more info by googling "Flash SharedObject"

Make sure to be prepared to handle cases where a user does not let you put data into SharedObjects. This is becoming a popular trend among tech-savy users that are concerned about their privacy.

Good luck!

Gdeglin
Thanks George Deglin .Each time your answer is very cleary . i like lot .:) :)
+4  A: 

First off: PHP runs on the server and therefore can send the necessary HTTP header to set a cookie, Flash runs in the client's browser and thus can not do the same.

However, there is a way to access and store cookies from flash/flex by using the flash.external.ExternalInterface and calling JavaScript functions to get and set cookies.

I've developed a class for doing 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;
     }
    }
}
Simon Lehmann
wooooow What a answer !!! . I like that . it's very useful to me Thank you very much Simon Lehmann .
+1  A: 

for an actual code example:


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

Paste this in flash, publish it twice and see how it stored the data :)

Bryan Grezeszak