Comunidad de diseño web y desarrollo en internet online

Sesiones con PHP y Remoting

Citar            
MensajeEscrito el 06 Ene 2006 07:43 pm
Hola.

He estado estudiando el tutorial de sesiones con PHP, MySQL y remoting que se encuentra en este site, pero a la hora de ejecutarlo, habiendo creado paso a paso, cada fichero (he encontrado algún que otro error al hacer copy/paste), se me detiene en "AMF --> 1/6 20:40:24 [INFO] logger: Invoking loGin on users".

Mi pregunta es sencilla, ¿a que puede ser debido? y... si alguien lo tiene hecho y me lo pudiera pasar sería de agradecer, puesto que no aparece en el tutorial para descargar.

Saludos!

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 06 Ene 2006 07:58 pm
ummm...estaba leyendo el tutorial...y veo que es mucho mas facil hacer todo lo que puso MorphX usando setCredentials...para validacion de usuarios y seguridad en metodos....es mucho mas practico a la hora de querer proteger. En fin...el caso es que usar sesiones en remoting es muy facil...simplemente declaras la variable de sesion en algun metodo del servicio y ya....


funcion counter ($user) {
if(isset($_SESSION['count'])) {
$_SESSION['count']++;
}
else {
$_SESSION['count'] = 0;
}
}

este de aqui seria mi metodo...dentro de X clase....si lo invocas una y otra vez...veras que el contador aumenta (tienes que crear un boton dentro de tu aplicacion flash que recargue los datos) ;)

saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 06 Ene 2006 08:34 pm
Éste es el código de la clase session que no se muestra en el tuto, la cual está basado en la user y me temo que reside aquí el fallo, a ver si alguien puede echarle una miradita (largo pero sencillo):

Código :

import mx.services.Log; 
import mx.rpc.RelayResponder;  
import mx.rpc.FaultEvent;  
import mx.rpc.ResultEvent; 
import mx.remoting.Service;  
import mx.remoting.PendingCall;  
import mx.remoting.debug.NetDebug; 

class Session 
{ 
   public static var WRITE = 0; 
   public static var READ = 1; 
    public static var READALL = 2; 
   public static var SESSID = 3; 
    public static var ERASE = 4; 

   public var onWrite:Function; 
   public var onRead:Function; 
   public var onReadAll:Function; 
    public var onSessid:Function; 
    public var onErase:Function; 
   private var service:Service; 
    private var loG:Log; 

   function Session() 
   { 
      loG = new Log(Log.DEBUG, "logger"); 
      loG.onLog = function(message:String):Void 
      { 
          trace("AMF --> " + message); 
       } 
      NetDebug.initialize(); 
      service = new Service("http://localhost/project/amfphp/gateway.php", loG, "sessions", null, null); 
   } 

   function write(key:String, value_:String):Void 
   { 
      var pc:PendingCall = service.write(key, value_); 
      pc.responder = new RelayResponder(this, "_onWrite", "_onAmfError"); 
   } 

   function read(key:String):Void 
   { 
      var pc:PendingCall = service.read(key); 
      pc.responder = new RelayResponder(this, "_onRead", "_onAmfError"); 
   } 

   function readAll():Void 
   { 
      var pc:PendingCall = service.read(); 
      pc.responder = new RelayResponder(this, "_onReadAll", "_onAmfError"); 
   } 

   function sessid():Void 
   { 
      var pc:PendingCall = service.sessid(); 
      pc.responder = new RelayResponder(this, "_onSessid", "_onAmfError"); 
   } 

   function erase(key:String):Void 
   { 
      var pc:PendingCall = service.erase(key); 
      pc.responder = new RelayResponder(this, "_onErase", "_onAmfError"); 
   } 

   function callBack (fc:Number, re:ResultEvent):Void 
   { 
      switch(fc)
      { 
         case WRITE: 
            if(onWrite != null) 
               onWrite(re); 
            else 
            {
               trace("");
               trace("Función 'onWrite' no declarada");
            } 
            break;
         
         case READ:
            if(onRead != null)
               onRead(re);
            else
            {
               trace("");
               trace("Función 'onRead' no declarada");
            }
            break; 

         case READALL:
            if(onReadAll != null)
               onReadAll(re);
            else
            {
               trace("");
               trace("Función 'onReadAll' no declarada");
            }
            break;
         
         case SESSID:
            if(onSessid != null)
               onSessid(re);
            else
            {
               trace("");
               trace("Función 'onSessid' no declarada");
            }
            break;
         
         case ERASE:
            if(onErase != null)
               onErase(re);
            else
            {
               trace("");
               trace("Función 'onErase' no declarada");
            }
            break;
      } 
   } 

   private function _onWrite(re:ResultEvent):Void 
   {
      callBack(WRITE,re); 
   } 

   private function _onRead(re:ResultEvent):Void 
   {
      callBack(READ,re); 
   } 

   private function _onReadAll(re:ResultEvent):Void 
   { 
      callBack(READALL,re); 
   }

   private function _onSessid(re:ResultEvent):Void 
   { 
      callBack(SESSID,re); 
   }

   private function _onErase(re:ResultEvent):Void 
   { 
      callBack(ERASE,re); 
   }

   private function _onAmfError( err:FaultEvent ):Void 
   { 
      NetDebug.trace({level:"None", message:"Error: " + err.fault.faultstring }); 
   } 
}



y esto es lo que me aparece en el trace a la hora de probar la aplicación:

Código :

AMF --> 1/6 21:27:17 [INFO] logger: Creating Service for sessions
AMF --> 1/6 21:27:17 [INFO] logger: Creating gateway connection for http://localhost/project/amfphp/gateway.php
AMF --> 1/6 21:27:17 [INFO] logger: Successfully created Service
AMF --> 1/6 21:27:17 [INFO] logger: Creating Service for users
AMF --> 1/6 21:27:17 [INFO] logger: Successfully created Service
AMF --> 1/6 21:27:17 [INFO] logger: Invoking sessid on sessions
AMF --> 1/6 21:27:17 [INFO] logger: sessions.sessid() returned "41192eaf4c8787953ecea658701f6e18"
//////////////// AQUÍ LE DOY A LOGIN ////////////////////////
AMF --> 1/6 21:27:24 [INFO] logger: Invoking loGin on users


entonces ahí se queda...

Una pequeña ayudita no me vendría mal. En cuanto a setCredentials, resumidamente ¿para que se utiliza? :o

Saludos! ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 06 Ene 2006 08:47 pm

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 06 Ene 2006 09:10 pm
Gracias, está bastante bien explicado. El único inconveniente es que para acabar de entenderlo necesitaría un ejemplo de un servicio utilizando el código Actionscrit que se muestra en el tuto y que echo en falta...

Así por encima, ¿en que debería consistir el servicio (para hacer una simple prueba)?

Saludos y gracias, una vez más. ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 06 Ene 2006 09:31 pm
no necesitas obtener el SID del PHP mediante un metodo...no es necesario. Remoting lo hace automaticamete y envia el SID en cada peticion a un metodo de nuestro servicio...sino fuera asi, seria complicado que remoting funcionase en aplicaciones a nivel desktop donde no existe cookies que "trackeen" la sesion. Fijate que si implementas el metodo de alla arriba que te puse (que es de AMFPHP) en un codigo asi :

Código :

var btCounter:mx.controls.Button
var sService = new Service("http://localhost/project/amfphp/gateway.php", loG, "sessions", null, null);
var objBtCounter:Object = new Object()
//
objBtCounter.click = function () {
    var pcCounter:PendingCall = sService.counter();
    pcCounter.responder = new RelayResponder(objBtCounter, "onResult", null)
}
objBtCounter.onResult = function (result:ResultEvent) {
      trace (result.result)
}
btCounter.addEventListener("click", objBtCounter)



tu PHP quedaria asi :

Código :

class Sesion {

function Sesion () {
   $methodTable = array ("counter"=>array(
                                      "access"=>"remote",
                                       "description" => ""
                                      )
                             ) ;

}

funcion counter ($user) { 
if(isset($_SESSION['count'])) { 
return $_SESSION['count']++; 
} 
else { 
$_SESSION['count'] = 0; 
return 0;
} 
}
}


Debes tener un componente boton llamado btCounter....fijate a que me refiero....espero que el codigo este bien ;)

saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 06 Ene 2006 10:02 pm
tangamampilia, gracias por la explicación, pero en mi post anterior me refería al código del enlace que puso maikel :oops: (aunque no dudes de que será útil para mi el ejemplo que has escrito).

Es decir, un ejemplo de un servicio para este AS:

Código :

import mx.remoting.Service;
import mx.services.Log;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;

var sSecured:Service = new Service ("gateway.php", null,"SecuredConn",null,null);
sSecured.connection.setCredentials ("daniel", "asfusion");

function welcomeResult (rs:ResultEvent) {
trace (rs.result);
}

function welcomeFault (fl:FaultEvent) {
trace("Su usuario no esta validado");
trace("Hubo un problema: "+fl.fault.faultstring);
trace("El código del error es: "+fl.fault.faultcode);
trace("Detalles: "+fl.fault.detail);
}

var pcWelcome = sSecured.welcome ();
pcWelcome = new RelayResponder (this, "welcomeResult", "welcomeFault");


Pues quisiera implementar cierta seguridad con los datos y me da la sensación que setCredentials sirve para algo así...

Gracias de nuevo ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 07 Ene 2006 01:32 am
Acabo de leer que setCredentials solo funciona con ColdFusion MX y JRun4 servers, así que con apache nanai, ¿no? :?

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 07 Ene 2006 02:56 am
[Sheer], comentarte que el problema que tienes, puede deberse a la estructura de tu base de datos.

El caso es que para ilustrar las sesiones en flash, elegí un simple sistema de login (tangamampilia te ofrece uno más sencillo que ilustra igualmente el sistema de sesiones) el caso es que deberias analizar el código de users.php para ver que campos son los que espera encontrar la función loGin en la BD, y asegurarte que la conexión es exitosa, pero lo fundamental que son las sesiones, ya las tienes vistas :)

El hecho de devolver el SSID de la session a traves del servicio, era de igual modo ilustrativo.

Saludos...

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

firefox
Citar            
MensajeEscrito el 07 Ene 2006 03:16 am
Bien, llevo toda la noche con el tema y puedo decir que lo he conseguido menos una pequeña cosa...

No sé por que a la hora de logearme me dice que la contraseña es incorrecta cuando no lo es (si detecta que el user existe). En la base de datos se guarda la contraseña encriptada (supongo que "a989e75e7c136aa749cec94baa5de853:b2" es "pass1" en md5) en el campo "pass" y no sé si debería ser así, por lo que agradecería que me lo pudieras confirmar.

También comentar que siempre tengo la misma id de sessión, supongo que es normal, ¿no?

Si no consigo descifrar lo que pasa ya pastearé el código.

Saludos ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 07 Ene 2006 02:59 pm
La id de sesion se mantiene mientras sea el mismo proceso quien llame al servicio, si siempre lo estas probrando desde el IDE de Flash, siempre es el mismo proceso, por eso tienes la misma id, cuando uses un navegador o lo lances standalone, cada vez que cierres el navegador o el player, se generará una nueva id de sesion.

En cuanto al pass, si es correcto que lo que se almacena en el campo pass de la BD es la clave plana, encriptada con MD5 y con un CRC al final, es decir No es simplemente MD5("pass1"); de todos modos la función para encriptar y comparar la clave, viene incluida el fichero incl.php que tiene que estar junto a los servicios.

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

firefox
Citar            
MensajeEscrito el 07 Ene 2006 03:34 pm
Pues me lo he estado mirando y no entiendo por que me dice que el password es incorrecto.

Adjunto un zip con todo para ver si me puedes echar un cable, puesto que el código es el del tuto, yo solamente he creado el AS de session. :crap:

No creo que haya ningún fallo en el código que he copiado, ya que seguramente lo habrás probado, pero por si acaso...

Saludos! ^^

ARCHIVO: www.minerometall.conc.es/fecsaendesa/img/flash/sesiones.zip

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 07 Ene 2006 03:51 pm
He descargado tu zip, pero no puedo ver tu .fla, porque yo uso MX2004, guardalo en este formato, para que le pueda echar un vistazo, el resto parece que está todo bien

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

firefox
Citar            
MensajeEscrito el 07 Ene 2006 04:32 pm
No había pensado en ello. Acabo de cambiarlo, utiliza la misma URL para descargarlo.

Saludos! ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 08 Ene 2006 02:48 pm
SOLUCIONADO, era un simple error cometido por mí en la función de incl.php :P

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 08 Ene 2006 05:31 pm
Me alegro de que ya te funcione, pero ten en cuenta que ese código es un simple ejemplo y por lo tanto si piensas hacer un login serio, debes mejorarlo :)

Saludos..

Por MorphX

SWAT Team

982 de clabLevel

3 tutoriales

  SWAT

La Telaraña Digital

firefox
Citar            
MensajeEscrito el 08 Ene 2006 05:44 pm
¿En que aspectos crees que debería mejorarse? :oops:

Saludos! ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 10 Ene 2006 06:19 pm
puedes poner algunas medidas de seguridad para evitar que te hackeen el sitio...hay un post interesante en la seccion de Linux...lo que si te recomiendo es que uses setCredentials...tambien funcionan para AMFPHP y es mucho mas practico que crear un sistema de login propio...ahi te paso un tuto Maikel ;)

saludos!

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 10 Ene 2006 11:10 pm
Lo que me gustaría tener es un ejemplo de uso del setCredentials, ya que he buscado y no he encontrado nada. He leido de que se trata y comprendo que utilizarlo facilita las cosas (aunque desconozco si realmente las hace más seguras), por eso me gustaría tener algo de código para entenderlo.

Si alguien dispone de código con uso de setCredentials, le estaría muy agradecido :oops:

Saludos! ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 11 Ene 2006 04:51 pm
Cada vez que leo algo acerca de setCredentials me lio más. ¿Los dos parámetros que pide, son el admin y pass de la BBDD? En caso afirmativo, ¿no es peligroso colocar estos datos en el cliente?

Saludos! ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 12 Ene 2006 12:26 am
em....aqui hay un ejemplo de setCredentials...:P

http://www.asfusion.com/blog/entry/autentificacion-de-usuarios-con-flashremoting

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 12 Ene 2006 03:08 pm
emm [Sheer] te comentó que puedes leer el tutorial de SetCredentials de nuevo ya está completo, por sino lo sabías el autor de ese tutorial es tangamampilia :wink: (rayos como me cuesta escribir ese nick), solo había un error que faltaba un código y lo corrigió anoche :P

saludos :)

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

netscape
Citar            
MensajeEscrito el 12 Ene 2006 05:25 pm
Eso quería yo ^^

Gracias!

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 15 Ene 2006 06:18 pm
A ver... he estado leyendo el documento en cuestión acerca de setCredentials y, aparte de encontrar algún que otro error en el código, no consigo hacer que funcione (y más difícil me es adivinarlo si no lo he utilizado nunca):

Código :

(AS)

import mx.remoting.Service;
import mx.services.Log;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;

var sSecured:Service = new Service ("http://localhost/project/amfphp/gateway.php", null,"SecuredConn",null,null);
sSecured.connection.setCredentials ("daniel", "asfusion");

function welcomeResult(rs:ResultEvent) {
    trace(rs.result);
}

function welcomeFault(fl:FaultEvent) {
trace("Su usuario no esta validado");
trace("Hubo un problema: "+fl.fault.faultstring);
trace("El código del error es: "+fl.fault.faultcode);
trace("Detalles: "+fl.fault.detail);
}

var pcWelcome = sSecured.welcome();
pcWelcome = new RelayResponder (this, "welcomeResult", "welcomeFault");


Código :

(PHP)

<?php

class SecuredConn
{
   function SecuredConn()
   {
      $this->methodTable = array(
         "welcome" => array(
         "description" => "validate function",
         "access" => "remote",
         "roles" => "admin"          
         ),
         
         "_authenticate" => array(
         "description" => "autentificación",
         "access" => "private",
         "arguments" => array ("user","pass")
         )
      );
   }
        
   function _authenticate($user, $pass)
   {                    
      if ($user == "daniel" && $pass == "asfusion")
      {
         return "admin";
      }
      else
      {
         return false;
      }
   }
   function welcome() {
      return "bienvenido!!!!";      
   }
}
?>


No sé si es necesario colocar "_authenticate" en el array "methodTable", pero he visto en códigos de por ahí que lo colocan y he tirado por esa vía (puesto o no, no funciona).

Agradecería una pequeña miradita para descubrir que sucede.

Saludos! ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 16 Ene 2006 05:08 am
Hola, ya revise el codigo

deberia quedar asi

Código :

import mx.remoting.Service;
import mx.services.Log;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
//
var sSecured:Service = new Service("http://localhost/~daniel/converse/gateway.php", null, "SecuredConn", null, null);
mx.remoting.debug.NetDebug.initialize(sSecured)
//mx.remoting.debug.NetDebug.trace()
sSecured.connection.setCredentials("daniel", "asfusion");

function welcomeResult(rs:ResultEvent) {
   trace(rs.result);
}
function welcomeFault(fl:FaultEvent) {
   trace("Su usuario no esta validado");
   trace("Hubo un problema: "+fl.fault.faultstring);
   trace("El código del error es: "+fl.fault.faultcode);
   trace("Detalles: "+fl.fault.detail);
}
var pcWelcome:PendingCall = sSecured.welcome();
pcWelcome.responder = new RelayResponder(this, "welcomeResult", "welcomeFault");


basicamente falto declarar la propiedad responder dentro del PendingCall (error mio del tutorial, ahora hago la correccion y la del codigo php).

por cierto, no es necesario declarar el metodo _autheticate...ya que remoting internamente espera llamar a ese metodo

saludos, y sorry :P

Por tangamampilia

.GAIA Developer

961 de clabLevel


6 articulos

Genero:Masculino   Anime Bloggers

México, D.F.

safari
Citar            
MensajeEscrito el 22 Sep 2007 08:33 pm

Por xyyy7

16 de clabLevel



 

Béisbol, Petróleo y Mujeres Bellas.- Venezuela (Maracay)

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.