2009-02-07 18 views
12

Estoy creando un widget Flex para un sitio vBulletin privado, y el widget Flex necesita acceder a un archivo XML en el servidor vBulletin para mostrar los datos.Accediendo a las cookies del navegador desde Flex

Por razones de seguridad, la URL XML deberá tener el valor en la cookie bbsessionhash pasada en la solicitud de URL de Flex. El widget Flex se integrará en el área privada en la que el usuario ha iniciado sesión, por lo que la solicitud de Flex procederá del mismo sitio web desde el que se encuentra la cookie.

¿Hay alguna forma de acceder a las cookies directamente dentro de Flex? Preferiría no utilizar ExternalInterface para tomar los datos de las cookies de JavaScript, ya que podría ser un poco complicado (las plantillas son desarrolladas por un equipo de desarrollo completamente diferente).

Respuesta

12

Nunca lo he intentado, pero this library podría hacer el truco.

+0

Eso es perfecto, curiosamente, en realidad usa ExternalInterface para escribir sus propias funciones de escritura/lectura de cookies en el documento envoltorio. Pero bueno, mientras que el JS no tenga que estar incrustado en la página en sí, ¡es bueno para mí! ¡Gracias! –

2

Según el flash o las cookies flexibles, el desarrollador puede utilizar el objeto compartido, que es un tipo de cookie utilizado para la aplicación flexible.

El fragmento de código de muestra es como followes

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

SharedObjects son mejores para su salud de hecho. Las cookies le darán errores de seguridad y problemas de navegador cruzado. Buen ejemplo aquí http://livedocs.adobe.com/flex/3/html/help.html?content=lsos_5.html – MonoThreaded

1

Acceso a la flexión de SharedObject no es el mismo que acceder a las cookies del navegador, para acceder a las cookies del navegador, puede utilizar la clase ExternalInterface, por favor marque la siguiente referencia a Vea las muestras:

http://livedocs.adobe.com/flex/3/html/help.html?content=passingarguments_4.html

una referencia de cómo usar y galletas de control de uso de JavaScript se puede encontrar aquí:

http://www.quirksmode.org/js/cookies.html

me gustaría utilizar el siguiente código de Flex:

var myCookie:String = ExternalInterface.call("getCookie('cookieName')"); 

Y en el código HTML me gustaría añadir lo siguiente Javascript:

function getCookie(c_name) { 
    var i,x,y,ARRcookies=document.cookie.split(";"); 
    for (i=0;i<ARRcookies.length;i++) { 
    x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("=")); 
    y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1); 
    x=x.replace(/^\s+|\s+$/g,""); 
    if (x==c_name) return unescape(y); 
    } 
} 

Si necesita más ayuda, también puede comprobar el Documentación de Flex.

Cuestiones relacionadas