He modificado el script Autentificator de Cluster (espero que no te importe ) para que me guarde una cookie con los datos del registro y asi ahorrar al usario que admita la cookie tener que registrarse siempre que entre en mi web.
Ahora surge un problema. Algunas veces (y algunos usuarios) hay problemas con el ingreso, el script muestra al usuario como no registrado (sin ningun error, es decir, es como si te hubieras registrado pero sin estarlo), cuando deberia estarlo y otras veces registra al usuario pero cuando introduce un archivo en la base de datos en esta aparece el nombre de usuario que lo ha introducido en blanco (el nombre de usuario entra en la BD por un query mediante $_SESSION['usuario_login']). Vamos que es como si la session no estuviera activa. No entiendo que puede pasar, ¿porque algunos si y otros no? Lo primero que se me ocurrió es que el cliente no aceptaba cookies pero según he planteado el script no deberia influir (lo único que ocurriría es que tendría que registrarse siempre que entrase).
Sólo me queda la posibilidad de que sea problema de las sessiones pero no se que problemas pueden dar, además tampoco se la configuracion del php.ini del servidor (wwwpuntocom).
A ver si alguien sabe que puede estar pasando. Os dejo el código por si tuviera algún fallo:
Código PHP:
<?php
require ("aut_config.inc.php");
$url = explode("?", $_SERVER['HTTP_REFERER']);
$pag_referida = $url[0];
$redir = $pag_referida;
// Grabamos los datos del usuario en una sesion.
// le damos un mobre a la sesion.
session_name($usuarios_sesion);
// incia sessiones
session_start();
// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && 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("$sql_host", "$sql_usuario", "$sql_pass") or die(header ("Location: $redir?error=0"));
mysql_select_db("$sql_db");
// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT * FROM $sql_tabla WHERE nick='".$_POST['user']."'") or die(header ("Location: $redir?error=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 = $_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_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['nick']) {
Header ("Location: $redir?error=2");
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['pass']) {
Header ("Location: $redir?error=3");
exit;
}
// Guardamos la información en una cookie y destruimos las variables login y password usadas
setcookie("coNick", $usuario_datos['nick'], time() + 7776000);
setcookie("coPass", $usuario_datos['pass'], time() + 7776000);
unset($login);
unset ($password);
// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas 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['nick'];
// definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
$_SESSION['usuario_password'] = $usuario_datos['pass'];
// Defino tambien el e-mail en la sesion
$_SESSION['usuario_email'] = $usuario_datos['email'];
// La variable exlogin vale para saber si el registro a sido exitoso o no y enviar al programa a una template o a otra segun el caso
$_SESSION['exlogin'] = true;
// 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=2");
exit;
}
} else {
// 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_login']) && !isset($_SESSION['usuario_password'])) {
if (isset($_COOKIE['coNick']) && isset($_COOKIE['coPass'])) {
// 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("$sql_host", "$sql_usuario", "$sql_pass") or die(header ("Location: $redir?error=0"));
mysql_select_db("$sql_db");
// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta = mysql_query("SELECT * FROM $sql_tabla WHERE nick='".$_COOKIE['coNick']."'") or die(header ("Location: $redir?error=1"));
if (mysql_num_rows($usuario_consulta) != 0) {
setcookie("coNick", $_COOKIE['coNick'], time() + 7776000);
setcookie("coPass", $_COOKIE['coPass'], time() + 7776000);
$usuario_datos = mysql_fetch_array($usuario_consulta);
mysql_free_result($usuario_consulta);
mysql_close($db_conexion);
// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas 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['nick'];
// definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
$_SESSION['usuario_password'] = $usuario_datos['pass'];
// Defino tambien el e-mail en la sesion
$_SESSION['usuario_email'] = $usuario_datos['email'];
$_SESSION['exlogin'] = true;
// 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 {
setcookie('coNick');
setcookie('coPass');
}
}
}
}
?>