是否有可能保值的Cookie在Flash或Flex? [英] is it possible to value store cookies in Flash or Flex?

查看:228
本文介绍了是否有可能保值的Cookie在Flash或Flex?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在PHP中还有一个基于存储它的setcookie 功能。在Flash这可能吗?。 如果可能的话又如何? 我想存储的价值。

In PHP there is a setcookie function based to store it. In Flash is it possible ?. If it is possible then how? I want to store value.

推荐答案

第一关:PHP运行在服务器上,因此可以发送必要的HTTP头设置cookie,Flash将运行在客户端的浏览器,因此无法做到一样的。

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.

不过,有一种方法来访问和闪存存储cookie /柔性使用的flash.external.ExternalInterface 并调用JavaScript函数来获取和设置cookie。

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;
    	}
    }
}

这篇关于是否有可能保值的Cookie在Flash或Flex?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆