Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Drama con autentificator

Estas en el tema de Drama con autentificator en el foro de Sistemas de gestión de contenidos en Foros del Web. Hola Amigos, les juro que he leido y releido todos los mensajes sobre esta aplicación y seguramente la solución está en forma evidente. El problema ...
  #1 (permalink)  
Antiguo 15/01/2004, 23:28
 
Fecha de Ingreso: abril-2002
Mensajes: 18
Antigüedad: 22 años, 7 meses
Puntos: 0
Drama con autentificator

Hola Amigos,

les juro que he leido y releido todos los mensajes sobre esta aplicación y seguramente la solución está en forma evidente.

El problema es el famoso Error cod: 2

he revisado la configuración del php.ini y está todo en forma, la sesión se crea en la carpeta temporal...sólo ocupo el aut_verifica.inc.php con el siguiente código

<?
// Motor autentificación usuarios.

// Cargar datos conexion y otras variables.
require ("config.php");
$usuarios_sesion="autentificator";

// chequear página que lo llama para devolver errores a dicha página.

$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die ("Error cod.:1 - Acceso incorrecto!");
exit;
}


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['usuario']) && isset($_POST['pass'])) {


// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexion= mysql_connect("$DB_SERVER", "$DB_USER", "$DB_PASS") or die(header ("Location: $redir?error_login=0"));
mysql_select_db("$DB_NAME");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT * FROM usuarios WHERE usuario='".$_POST['usuario']."'") or die(header ("Location: $redir?error_login=1"));

// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
if (mysql_num_rows($usuario_consulta) != 0) {

// eliminamos barras invertidas y dobles en sencillas
$login = stripslashes($_POST['usuario']);
// encriptamos el password en formato md5 irreversible.
$password = $_POST['pass'];

// almacenamos datos del Usuario en un array para empezar a chequear.
$usuario_datos = mysql_fetch_array($usuario_consulta);

// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
mysql_free_result($usuario_consulta);
// cerramos la Base de dtos.
mysql_close($db_conexion);

// chequeamos el nombre del usuario otra vez contrastandolo con la BD
// esta vez sin barras invertidas, etc ...
// si no es correcto, salimos del script con error 4 y redireccionamos a la
// página de error.
if ($login != $usuario_datos['usuario']) {
Header ("Location: $redir?error_login=4");
exit;}

// si el password no es correcto ..
// salimos del script con error 3 y redireccinamos hacia la página de error
if ($password != $usuario_datos['password']) {
Header ("Location: $redir?error_login=3");
exit;}

// Paranoia: destruimos las variables login y password usadas
unset($login);
unset ($password);

// En este punto, el usuario ya esta validado.
// Grabamos los datos del usuario en una sesion.

// inicia sessiones
session_start();
// le damos un mobre a la sesion (por si quisieramos identificarla)
session_name($usuarios_sesion);
// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');

// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.

//definimos $usuario_login con el nombre de usuario de la sesion actual
$_SESSION['usuario_user']=$usuario_datos['usuario'];

//definimos $usuario_password con el password del usuario de la sesión actual
$_SESSION['usuario_pass']=$usuario_datos['password'];

//definimos $usuario_cliente con el codigo del cliente
$_SESSION['usuario_cliente']=$usuario_datos['id_cliente'];

//definimos $usuario_nombre con el nombre del usuario asociado al pass
$_SESSION['usuario_nombre']=$usuario_datos['nombre'];

// Hacemos una llamada a si mismo (scritp) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
$pag=$_SERVER['PHP_SELF'];
Header ("Location: $pag?");
exit;

} else {
// si no esta el nombre de usuario en la BD o el password ..
// se devuelve a pagina q lo llamo con error
Header ("Location: $redir?error_login=2");
exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_user']) && !isset($_SESSION['usuario_pass'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}

?>


-------------------
Si utilizo el código anterior me muestra el mensaje...intruseando he descubierto que si elimino este trozo del código me escapo del error:

// Hacemos una llamada a si mismo (scritp) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
$pag=$_SERVER['PHP_SELF'];
Header ("Location: $pag?");
exit;


Pero al terminar la sesión no tengo impedimentos para volver atrás (obviamente la sesión no se destruye)...

Alguien me puede ayudar???, Master Cluster???

Saludos
Mauricio
  #2 (permalink)  
Antiguo 16/01/2004, 18:21
 
Fecha de Ingreso: abril-2002
Mensajes: 18
Antigüedad: 22 años, 7 meses
Puntos: 0
Solucionado!!!

Le hice un par de modificaciones al script y me funcionó, aquí va pa'l que tenga los mismos problemas:

<?
// Motor autentificación usuarios.

// Cargar datos conexion y otras variables.
require ("config.php");
$usuarios_sesion="autentificator";

// chequear página que lo llama para devolver errores a dicha página.

$url = explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die ("Error cod.:1 - Acceso incorrecto!");
exit;
}


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['usuario']) && isset($_POST['pass'])) {


// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexion= mysql_connect("$DB_SERVER", "$DB_USER", "$DB_PASS") or die(header ("Location: $redir?error_login=0"));
mysql_select_db("$DB_NAME");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT * FROM usuarios WHERE usuario='".$_POST['usuario']."'") or die(header ("Location: $redir?error_login=1"));

// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
if (mysql_num_rows($usuario_consulta) != 0) {

// eliminamos barras invertidas y dobles en sencillas
$login = stripslashes($_POST['usuario']);
// encriptamos el password en formato md5 irreversible.
$password = $_POST['pass'];

// almacenamos datos del Usuario en un array para empezar a chequear.
$usuario_datos = mysql_fetch_array($usuario_consulta);

// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
mysql_free_result($usuario_consulta);
// cerramos la Base de dtos.
mysql_close($db_conexion);

// chequeamos el nombre del usuario otra vez contrastandolo con la BD
// esta vez sin barras invertidas, etc ...
// si no es correcto, salimos del script con error 4 y redireccionamos a la
// página de error.
if ($login != $usuario_datos['usuario']) {
Header ("Location: $redir?error_login=4");
exit;}

// si el password no es correcto ..
// salimos del script con error 3 y redireccinamos hacia la página de error
if ($password != $usuario_datos['password']) {
Header ("Location: $redir?error_login=3");
exit;}

// Paranoia: destruimos las variables login y password usadas
unset($login);
unset ($password);

// En este punto, el usuario ya esta validado.
// Grabamos los datos del usuario en una sesion.

// inicia sessiones
session_start();
// le damos un mobre a la sesion (por si quisieramos identificarla)
session_name($usuarios_sesion);
// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');

// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.

//definimos $usuario_login con el nombre de usuario de la sesion actual
$_SESSION['usuario_user']=$usuario_datos['usuario'];

//definimos $usuario_password con el password del usuario de la sesión actual
$_SESSION['usuario_pass']=$usuario_datos['password'];

//definimos $usuario_cliente con el codigo del cliente
$_SESSION['usuario_cliente']=$usuario_datos['id_cliente'];

//definimos $usuario_nombre con el nombre del usuario asociado al pass
$_SESSION['usuario_nombre']=$usuario_datos['nombre'];

// Hacemos una llamada a si mismo (scritp) para que queden disponibles
// las variables de session en el array asociado $HTTP_...
Header ("Location: $PHP_SELF");
exit;

} else {
// si no esta el nombre de usuario en la BD o el password ..
// se devuelve a pagina q lo llamo con error
Header ("Location: $redir?error_login=2");
exit;}
}


// -------- Chequear sesión existe -------


// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_user']) && !isset($_SESSION['usuario_pass']) && !isset($_SESSION['usuario_cliente']) && !isset($_SESSION['usuario_nombre']))
{
die (header ("Location: $redir?error_login=7"));
exit;
}

?>


y el logout quedó así:

<?
// Cargamos variables
require ("config.php");
$usuarios_sesion="autentificator";

session_start();
// le damos un mobre a la sesion (por si quisieramos identificarla)
session_name($usuarios_sesion);
// iniciamos sesiones

session_unset();
// destruimos la session de usuarios.
session_destroy();
?>
...código de la página de salida


----------

Saludos
Mauricio
  #3 (permalink)  
Antiguo 16/01/2004, 20:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
No veo bien los cambios que has realizado .. sólo veo que usas un par de variables de sesión extra a las originales de Autentificator...

Lo que si veo ... es que hay un incicio de sesiones que el orden de session_start() y session_name() no es correcto. El nombre de la sesión se ha de definir antes que el session_start() .. De hecho (no sé que versión usas de Autentificato) había cometido ese error, pero por ya se corrigió.

El orden correcto sería:
Código PHP:
session_name("elnombredelasesion");
session_start(); 
El error "cod.2" que aparece es por qué no existen las variables de sesión .. Y no es que no existan .. es que están en "otra" sesión a la que estas leyendo.

Si inicias una sessión con nombre (como así trabaja autentificator) ese nombre de sesión ha de seguir siendo el mismo. Por defecto PHP usa su própio nombre de sesión .. así que si usas otro (como es el caso) . estaras usando "dos!" sesiones (una con el nombre que crea autentificator y otra con la que crea PHP).

Un saludo,

PD: Cuando pongas código ... usa el botón PHP que saldrá el código coloreado e identado ..
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 16/01/2004 a las 20:54
  #4 (permalink)  
Antiguo 19/01/2004, 07:12
 
Fecha de Ingreso: abril-2002
Mensajes: 18
Antigüedad: 22 años, 7 meses
Puntos: 0
Para serte sincero no cacho muy bien PHP, antes había trabajado perfectamente con tu primera versión del autentificator, pero ahora con el asunto del register_globals tuve que hacer un update, así que bajé la versión que está en tu sitio (v2.01 creo).

Los cambios que realicé fueron básicos, y como el problema estaba en el famoso cod 2 me dediqué a hacer comparaciones con la primera versión y quedó perfecto.

Con respecto al nombre de la sesión, te agradezco la corrección, puedes ver que en el script que tenía problemas está como tu dices. Sin embargo, como te dije anteriormente, lo compare con la primera versión y como los cambios funcionaron lo deje así.

Con respecto al error, haciendo pruebas eliminaba todas las sesiones, entonces volvía a entrar y el mismo error. Según lo que tu dices, me imagino que debería haber tenido dos archivos de sesiones, pero tenía uno sólo e igual aparecía el error.

No cache el asunto del nombre...si tu mismo le colocas nombre a la sesión...si te das cuenta utilizó para el script (el que autentifica y el de salida) la siguiente variable: $usuarios_sesion="autentificator";

Aún todo lo anterior, me intriga que a todos le resulte tu script y no a mí, en todo caso los cambios fueron menores:
1) eliminar session_name($usuarios_sesion);
2) eliminar session_destroy();

Que significa lo anterior..ni idea

Saludos
Mauricio
P.D. no tenía idea del uso del botón PHP, gracias por el tip.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:12.