Cita:
Iniciado por roninrojo Hola cluster, siento atormentarte con una duda que te deben haber fusilado mil veces ya, pero empiezo a estar desesperadillo y no encuentro la solucion buscando en hilo del tema ni en el foro
LLevo usando tu autentificator hace muchisímo y es la primera vez que me pasa.
En localhost me funciona perfecto y en mucho otro sitios on-line también, el caso es que al subirlo on-line de nuevo esta vez me ha dado:
Error cod.: 2 - Acceso incorrecto!
¿Esto es que no se propaga la sesion verdad?
version php 5.1.6 y Apache/2.0.59
la carpeta temp existe
session.use_trans_sid = 0 <- me funciona en otros sitios con la directiva a 0 así que no se... te pongo mi archivo:
Código PHP:
<?
// Autentificator
// Gestin de Usuarios PHP+Mysql+sesiones
// by Pedro Noves V. (Cluster)
// [email protected]
// v1.0 - 17/04/2002 Versin inicial.
// v1.01 - 24/04/2002 Solucionado error sintactico en aut_verifica.inc.php.
// v1.05 - 17/05/2002 Optimizacin cdigo aut_verifia.inc.php
// v1.06 - 03/06/2002 Correccin de errores de la versin 1.05 y error con navegadores Netscape
// v2.00 - 18/08/2002 Optimizacin cdigo + Seguridad.
// Ahora funciona con la directiva registre_globals= OFF. (PHP > 4.1.x)
// Optimizacin Tablas SQL. (rangos de tipos).
// v2.01 - 16/10/2002 Solucionado "despistes" de la versin 2.00 de Autentificator
// en aut_verifica.inc.php y aut_gestion_usuarios.php que ocasinavan errores al trabajar
// con la directiva registre_globals= OFF.
// Solucionado error definicin nombre de la sessin.
//
// Descripcin:
// Gestin de Pginas restringidas a Usuarios, con nivel de acceso
// y gestin de errores en el Login
// + administracin de usuarios (altas/bajas/modificaciones)
//
// Licencia GPL con estas extensiones:
// - Uselo con el fin que quiera (personal o lucrativo).
// - Si encuentra el cdigo de utilidad y lo usas, mandeme un mail si lo desea.
// - Si mejora el cdigo o encuentra errores, hagamelo saber el mail indicado.
//
// Instalacin y uso del Gestor de usuarios en:
// documentacion.htm
// ----------------------------------------------------------------------------
// Motor autentificacin usuarios.
// Cargar datos conexion y otras variables.
include('config_BD.php');
// chequear pgina que lo llama para devolver errores a dicha pgina.
$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
/*echo $_POST['user'];
echo $_POST['password'];
*/
if (isset($_POST['user']) && isset($_POST['pass'])) {
// Conexin base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
// realizamos la consulta a la BD para chequear datos del Usuario.
$sql = "SELECT * FROM $tb_usuarios WHERE usuario='".$_POST['user']."'";
$usuario_consulta = mysql_query($sql,$conn) 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)
$num_reg = mysql_num_rows($usuario_consulta);
if ($num_reg != 0) {
// eliminamos barras invertidas y dobles en sencillas
$login = stripslashes($_POST['user']);
// encriptamos el password en formato md5 irreversible.
$password = md5($_POST['pass']);
// almacenamos datos del Usuario en un array para empezar a chequear.
$usuario_datos = mysql_fetch_object($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($conn);
// 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
// pgina 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 pgina de error
if ($password != $usuario_datos->pass) {
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.
// le damos un mobre a la sesion.
session_name($usuarios_sesion);
// incia sessiones
session_start();
// Paranoia: decimos al navegador que no "cachee" esta pgina.
session_cache_limiter('nocache,private');
// Asignamos variables de sesin con datos del Usuario para el uso en el
// resto de pginas autentificadas.
// definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
$_SESSION['usuario_id']=$usuario_datos->ID;
// definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_nivel']=$usuario_datos->nivel_acceso;
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_login']=$usuario_datos->usuario;
//definimos usuario_password con el password del usuario de la sesin actual (formato md5 encriptado)
$_SESSION['usuario_password']=$usuario_datos->pass;
// 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 sesin existe -------
// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();
echo $usuarios_sesion; //aparece vacio en pantalla ¿donde esta el fallo?
// Chequeamos si estan creadas las variables de sesin de identificacin 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_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die ("Error cod.: 2 - Acceso incorrecto!");
exit;
}
}
?>
Hay unos cambios mínimos que no creo que tengan que ver como fetch_object, tambíen he comprobado que la consulta funcione, en fin...
Gracias por un código tan bueno y por tu paciencia,
Saludos.
Si, .. así como mencionas el error "codigo 2" se refiere a la no posibilidad de encontrar la sesión original.
Revisa que propagues el SID correctamente. Dado las redirecciones que hace el script y por comodidad de Uds. los usuarios, se requiere que el SID se propague en cookies, por ende tu configuración de PHP debe ser tipo:
session.use_cookies = 1
session.use_only_cookie = 1 (recomendable)
session.use_trans_sid = 0
A su vez revisa tu navegador y nivel de seguridad del mismo, recuerda que PHP está intentando crear una Cookie para propagar el SID. Si esta no se consigue crear (por qué la bloqueas .. ) no se continuará con el SID válido.
Asumo que el resto de configuración de sesiones es correcta .. session.save_path apunte a un directorio que exista, etc. (El resto es opcional).
Un saludo,