Codigo User.as
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 User
{
//Constantes ------------------------------------------------------
//Tipos de CallBack
public static var REGISTER = 0;
public static var LOGIN = 1;
public static var LOGOUT = 2;
//Variables ------------------------------------------------------
public var onRegUser:Function;
public var onLoGin:Function;
public var onLoGout:Function;
private var service:Service;
private var loG:Log;
//Constructor ----------------------------------------------------
function User()
{
loG = new Log(Log.DEBUG, "logger");
loG.onLog = function(message:String):Void
{
trace("AMF --> " + message);
}
NetDebug.initialize();
service = new Service("http://i-latina.com.mx/remoting/gateway.php", loG, "users", null, null);
}
//Llamadas a las Funciones del Servicio ----------------------------------------------
//Llama al servicio regUser de nuestro users.php
function regUser(user:String, pass:String, email:String):Void
{
var pc:PendingCall = service.regUser(user, pass, email);
pc.responder = new RelayResponder(this, "_onRegUser", "_onAmfError");
}
//Logea un usuario en el sistema
function loGin(user:String, pass:String):Void
{
var pc:PendingCall = service.loGin(user, pass);
pc.responder = new RelayResponder(this, "_onLoGin", "_onAmfError");
}
//Expulsa al usuario
function loGout():Void
{
var pc:PendingCall = service.loGout();
pc.responder = new RelayResponder(this, "_onLoGout", "_onAmfError");
}
//------------------------------------------------------------------
//Función de CallBack ------------------------------------------------
function callBack (fc:Number, re:ResultEvent):Void
{
switch(fc)
{
case REGISTER:
if(onRegUser != null)
onRegUser(re);
else
{
trace("");
trace("Función 'onRegUser' no declarada");
}
break;
case LOGIN:
if(onLoGin != null)
onLoGin(re);
else
{
trace("");
trace("Función 'onLoGin' no declarada");
}
break;
case LOGOUT:
if(onLoGout != null)
onLoGout(re);
else
{
trace("");
trace("Función 'onLoGout' no declarada");
}
break;
}
}
//Manejadores de las respuesta de Remoting
private function _onRegUser(re:ResultEvent):Void
{
callBack(REGISTER,re);
}
private function _onLoGin(re:ResultEvent):Void
{
callBack(LOGIN,re);
}
private function _onLoGout(re:ResultEvent):Void
{
callBack(LOGOUT,re);
}
//Manejo de los errores de Remoting
private function _onAmfError( err:FaultEvent ):Void
{
NetDebug.trace({level:"None", message:"Error: " + err.fault.faultstring });
}
}
Codigo users.php
Código :
<?php
include ("include/config.php");
include ("include/tablas.php");
include ("incl.php");
class users
{
//Constructor de clase
function users()
{
//Aquí definimos la tabla de metodos exportables a Flash.
$this->methodTable = array(
"regUser" => array(
"description" => "Registra un nuevo usuario",
"access" => "remote",
"arguments" => array ("user","pass","email")
),
"loGin" => array(
"description" => "Logea un usuario",
"access" => "remote",
"arguments" => array ("user","pass")
),
"loGout" => array(
"description" => "Cierra la sessión de un usuario",
"access" => "remote"
)
);
//Conectamos con nuestro servidor de BD, con los datos que tenemos definidos en config.php
mysql_connect(DB_SERVER., .DB_SERVER_USERNAME., .DB_SERVER_PASSWORD.);
//Seleccionamo la base de datos de trabajo, con el dato definido igualmente en la config.php
mysql_select_db(DB_DATABASE);
}
//Registra un nuevo usuario en el sistema
function regUser($user,$pass,$email)
{
//Codigo de Registro
$pass = pass_encript($pass); //Encriptamos el "pass" recibido de Flash
//Ahora comprobamos si el nombre de usuario ya existe en la BD,
//en caso afirmativo, devolveremos un código de error a Flash informando de,
//esta incidencia, ahora bien, si no existe, lo añade sin problemas.
if (!$this->extUser($user))
{
//Con esta instrucción almacenamos en la BD los datos del nuevo usuario, si la función devuelve "true"
//significa que la operación de almacenamiento tuvo exito, y por tanto ya se añadió nuestro usuario
//en caso contrario, se devuelve a Flash, otro código de error informando de esta incidencia.
if(mysql_query("insert into " . TABLA_USERS . " (user,pass,email,alta) values ('".
addslashes($user)."','".addslashes($pass)."','".addslashes($email)."','".
addslashes(date("Ymd"))."')"))
{
//Una vez el usuario ha sido registrado correctamente en la BD,
//guardamos en la session el usuario y la password encriptada
$_SESSION['ulogged'] = $user;
$_SESSION['plogged'] = $pass;
$_SESSION['iplogged'] = get_ip();
return 1;//Registro efectuado
}
else
return 0;//Registro fallido
}
return 2; //Error el usuario ya existe
}
//Loggea a un usuario en el sistema, autorizandolo.
function loGin($user,$pass)
{
//Codigo de Login
//Con esta instrucción consultamos a la BD los datos de que dispone del usuario solicitado
$rst = mysql_query("select * from " . TABLA_USERS . " where user='" . addslashes($user) ."'");
//si el recuento de registro es distinto de 0, significa que el usuario existe en la
//BD, y aprovechamos la consulta realizada, para obtener sus datos, y autorizarle.
if(mysql_num_rows($rst)!=0)
{
$row = mysql_fetch_array($rst);//Extraemos los datos
//Obtenemos la ip real del usuario.
$ip = get_ip();
///---- Procedemos a realizar el login con estos datos.
//---------------------------------------------------------------
//Esta instrucción está declarada en incl.php, y devuelve "true" si el password pasado es válido.
if(pass_validate($pass,$row['pass']))//Validamos el password
{
//Si Flash nos pasó un password en texto plano "CORRECTO", pues
//damos por bueno el login, e informamos a Flash de ello, para que obre en consecuencia :)
$_SESSION['ulogged'] = $user; //Salvamos en la sesion el usuario
$_SESSION['plogged'] = $row['pass']; //la pass encriptada
$_SESSION['iplogged'] = $ip;// y la IP del cliente.
return 1; //login correcto
}
else
return 2; //password incorrecto
}
else
return 0; //El usuario no existe
}
//Expulsa del sistema al usuario
function loGout()
{
session_destroy(); //Destruimos la sessión.
return true;
}
//Esta es una función de uso interno, no se publica hacia Flash, es simplemente para saber si un usuario
//ya existe en la BD.
function extUser($user)
{
return intval(mysql_result(mysql_query("select count(*) as existe from "
. TABLA_USERS . " where user='"
. addslashes($user) ."'"),0,"existe"));
}
}
Codigo config.php
Código :
<?php
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'ilatina');
define('DB_SERVER_PASSWORD', 'xxxxx');
define('DB_DATABASE', 'sabila');
?>
Codigo incl.php
Código :
<?php
// Valida el contenido de una variable
function not_null($vAL)
{
if (is_array($vAL))
{
if (sizeof($vAL) > 0)
return true;
else
return false;
}
else
{
if (($vAL != '') && (strtolower($vAL) != 'null') && (strlen(trim($vAL)) > 0))
return true;
else
return false;
}
}
// Valida un password en texto plano contra uno encriptado
function pass_validate($pLN, $eNCR)
{
if (not_null($pLN) && not_null($eNCR))
{
$pIL = explode(':', $eNCR);
if (sizeof($pIL) != 2)
return false;
if (md5($pIL[1] . $pLN) == $pIL[0])
return true;
}
return false;
}
// Genera un pass encriptado a partir de uno texto plano
function pass_encript($pLN)
{
$pASS = '';
for ($i=0; $i<10; $i++)
$pASS .= mt_rand();
$sALT = substr(md5($pASS), 0, 2);
$pASS = md5($sALT . $pLN) . ':' . $sALT;
return $pASS;
}
//Obtenemos la ip real del cliente
function get_ip()
{
if (preg_match('/^(\d{1,3}\.){3}\d{1,3}$/s', $_SERVER["HTTP_CLIENT_IP"]))
$ip = $_SERVER["HTTP_CLIENT_IP"];
else
{
if (preg_match('/^(\d{1,3}\.){3}\d{1,3}$/s', $_SERVER["HTTP_X_FORWARDED_FOR"]))
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else
if (preg_match('/^(\d{1,3}\.){3}\d{1,3}$/s', $_SERVER["REMOTE_HOST"]))
$ip = $_SERVER["REMOTE_HOST"];
else
$ip = $_SERVER["REMOTE_ADDR"];
}
return($ip);
}
?>
Codigo tablas.php
Código :
<?php
define('TABLA_USERS','usuarios');
?>
Codigo sessions.php
Código :
<?php
class sessions{
function sessions()
{
$this->methodTable = array(
"write" => array(
"description" => "Guarda el valor 'value' en la variable de session 'key'.",
"access" => "remote",
"arguments" => array ("key","value")
),
"read" => array(
"description" => "Devuelve el contenido de la variable de session 'key'.",
"access" => "remote",
"arguments" => array ("key")
),
"readAll" => array(
"description" => "Devuelve el contenido de la session completa",
"access" => "remote"
),
"sessid" => array(
"description" => "Devuelve el Id de session activa.",
"access" => "remote"
),
"erase" => array(
"description" => "Elimina la variable 'key' de la session",
"access" => "remote",
"arguments" => array("key")
)
);
}
//Escribe un valor desde Flash en la sessión activa
function write($key, $value)
{
$_SESSION[$key] = $value;
return isset($_SESSION[$key]);
}
//Devuelve a Flash el contenido de una variable de sessión concreto
function read($key)
{
return $_SESSION[$key];
}
//Devuelve a Flash el contenido completo de la sessión.
function readAll()
{
return $_SESSION;
}
//Devuelve a Flash el identificador de la sessión activa
function sessid()
{
return session_id();
}
//Elimina una varible de sessión desde Flash.
function erase($key)
{
unset($_SESSION[$key]);
return true;
}
}
?>
La verdad no se q estoy haciendo mal

les pido su apoyo ....
Gracias