Foros del Web » Programando para Internet » PHP »

Problemas con autentificación de usuarios

Estas en el tema de Problemas con autentificación de usuarios en el foro de PHP en Foros del Web. Tengo un problema con mi sistema de autentificación de usuarios, me da el siguiente error: Notice: Undefined index: autentificado in c:\inetpub\wwwroot\php\2007\seguridad.php on line 6 Warning: ...
  #1 (permalink)  
Antiguo 18/01/2007, 03:34
 
Fecha de Ingreso: mayo-2006
Mensajes: 10
Antigüedad: 17 años, 11 meses
Puntos: 0
Problemas con autentificación de usuarios

Tengo un problema con mi sistema de autentificación de usuarios, me da el siguiente error:

Notice: Undefined index: autentificado in c:\inetpub\wwwroot\php\2007\seguridad.php on line 6

Warning: Cannot modify header information - headers already sent by (output started at c:\inetpub\wwwroot\php\2007\seguridad.php:6) in c:\inetpub\wwwroot\php\2007\seguridad.php on line 8

Si voy hacia atrás y vuelvo a meter usuario y contraseña entra perfectamente pero a la primera falla. Seguro que es alguna tontería que he pasado por alto.

El código que comprueba usuario y crea sesión es el siguiente:

<?
session_start();
header("Cache-control: private"); // Arregla IE 6

//conecto con la base de datos, OJO, estos datos los he cambiado para el foro, entra bien a la BD
$conn = mssql_connect("servidor","usuario","password");
//selecciono la BBDD
mssql_select_db("web");

//Sentencia SQL para buscar un usuario con esos datos
$usuario=$_POST["usuario"];
$contrasena=$_POST["contrasena"];
$ssql = "SELECT url, nombre_usuario FROM usuario WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";

//Ejecuto la sentencia
$rs=mssql_query ($ssql);

//usuario y contraseña válidos
//defino una sesion y guardo datos
if (mssql_num_rows($rs)!=0){

session_register("autentificado");
$_SESSION["autentificado"]= "SI";
//defino la fecha y hora de inicio de sesión en formato aaaa-mm-dd hh:mm:ss
$_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
// Guardo usuario, URL principal del usuario y mando a URL del usuario
$row=mssql_fetch_array($rs);
session_register("nombre_usuario");
$_SESSION["nombre_usuario"]= $row[1];
session_register("url_usuario");
$_SESSION["url_usuario"]= $row[0];
// Lá página del usuario lanza justo en la primera linea el fichero seguridad.php que pongo después en este mensaje
header ("Location: ".$row[0]);

}else {
session_unset();
session_destroy(); // destruyo la sesión
//si no existe le mando otra vez a la portada
header("Location: login.php?errorusuario=si");
}

mssql_close($conn);

?>

Depués en cada página restringida lanzo este código en la primera linea para comprobar que se ha autentificado previamente, esta página es la que me da problemas (seguridad.php):

<?
session_start();
header("Cache-control: private"); // Arregla IE 6

//antes de hacer los cálculos, compruebo que el usuario está logueado
if ($_SESSION["autentificado"] != "SI") {
//si no está logueado lo envío a la página de autentificación
header("Location: login.php");
//ademas salgo de este script
exit();
} else {
//sino, calculamos el tiempo transcurrido
$fechaGuardada = $_SESSION["ultimoAcceso"];
$ahora = date("Y-n-j H:i:s");
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));

//comparamos el tiempo transcurrido en SEGUNDOS
if($tiempo_transcurrido >= 600) {
//si pasaron 10 minutos o más
session_unset();
session_destroy(); // destruyo la sesión
header("Location: login.php"); //envío al usuario a la pag. de autenticación
//sino, actualizo la fecha de la sesión
}else {
$_SESSION["ultimoAcceso"] = $ahora;
}
}
?>

Gracias
  #2 (permalink)  
Antiguo 18/01/2007, 03:37
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Re: Problemas con autentificación de usuarios

Según el error, es un problema con header(). Lo envías dos veces, tal vez esté ahí el error. De todas formas comprueba que no haya nada de espacio o html antes del php (<?).
  #3 (permalink)  
Antiguo 18/01/2007, 03:54
 
Fecha de Ingreso: mayo-2006
Mensajes: 10
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: Problemas con autentificación de usuarios

Ya he comprobado lo de los espacios y no es eso, si te fijas el primer error es:
Notice: Undefined index: autentificado in c:\inetpub\wwwroot\php\2007\seguridad.php on line 5

esa variable, autentificado, no la reconoce en el segundo código pese a que en el primero la inicializo con:
session_register("autentificado");
$_SESSION["autentificado"]= "SI";

Luego en el segundo código pregunto por ella en:
if ($_SESSION["autentificado"] != "SI") {
pero ahí es justo cuando dice que no existe, cuando en el anterior programa la he creado e inicializado, al no encontrarla ejecuta la linea siguiente que es la que daría el segundo error:
header("Location: login.php");

Sigo hecho un lio con este tema, la segunda vez que lo lanzo si que está la variable inicializada pero la primera vez no, que cosa mas rara.
  #4 (permalink)  
Antiguo 18/01/2007, 04:19
 
Fecha de Ingreso: mayo-2006
Mensajes: 10
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: Problemas con autentificación de usuarios

Lo he solucionado comprobando que la variable esté creada de antemano con este código en el programa seguridad.php:

<?session_start();
header("Cache-control: private"); // Arregla IE 6

//Compruebo que el usuario está logueado
$var = isset ($_SESSION["autentificado"]) ;

if ($var == FALSE) {
//si no está logueado lo envío a la página de autentificación
include ("login.php");
exit(); }
if ($var == TRUE AND $var != "SI") {
//si no está logueado lo envío a la página de autentificación
include ("login.php");
exit();
}
else
{
//sino, calculamos el tiempo transcurrido
$fechaGuardada = $_SESSION["ultimoAcceso"];
$ahora = date("Y-n-j H:i:s");
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));

//comparamos el tiempo transcurrido en SEGUNDOS
if($tiempo_transcurrido >= 60) {
//si pasaron 10 minutos o más
session_unset();
session_destroy(); // destruyo la sesión
header("Location: login.php"); //envío al usuario a la pag. de autenticación
//sino, actualizo la fecha de la sesión
}else {
$_SESSION["ultimoAcceso"] = $ahora;
}
}

?>

Sin embargo esto soluciona los mensaje de error pero hay que autentificarse dos veces porque la promera vez siempre falla.

Se admiten sugerencias de porque la primera vez no entra.

Gracias.
  #5 (permalink)  
Antiguo 18/01/2007, 10:40
Avatar de Dabogam  
Fecha de Ingreso: enero-2007
Ubicación: Mérida, Yucatán
Mensajes: 21
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Problemas con autentificación de usuarios

Pos mira se me hace un poco complicado la manera en como manejas la autentificacion, yo hice un script que me funciona y va asi, cualquier duda me dices ;)

Código:
<?php
/**
* @author David Gamboa Gomez
* Clase encargada de realizar la autentificacion de un usuario en la base de datos
*
*/ 
include_once("BDMysql.class.php");
include_once("Consulta.class.php");

	class Usuario{
	  		/**
	  		 * Nombre del usuario 
	  		 *
	  		 * @var String
	  		 */
	  		private $login;
	  		/**
	  		 * Password del usuario
	  		 *
	  		 * @var String
	  		 */
	  		private $passw;
	  		/**
	  		 * Objeto que maneja la conexion a la base de datos
	  		 *
	  		 * @var BDMysql
	  		 */
	  		private $db;
	  		/**
	  		 * Objeto que realiza las consultas a la base de datos
	  		 *
	  		 * @var Consulta
	  		 */
	  		private $query;
	  		
		function __construct(){
		  	$this->db= new BDMysql();
		  	$this->query= new Consulta();
		}
		
		/**
		 * Establece el valor de la variable $login
		 *
		 * @param String $login
		 */
		function setLogin($login){
			$this->login=$login;
		}
		
		/**
		 * Establece el valor de la varisable $password
		 *
		 * @param String $password
		 */
		function setPassword($password){
			$this->passw= $password;	
		}
		
	  	 
	  	/**
	  	 * Funcion encargada de realizar la autentificacion del usuario, si resulta correcta redirecciona el explorador a la pantalla 
	  	 * inicial y establece las variables de sesion, de lo contrario devuelve un indicador de que la autentificacion fue incorrecta
	  	 * @return Int
	  	 */
	  	function autentificacion(){
	  				
	  		$this->db->conectar("localhost","miusuario","mi password", "mibd");

			$sqlb="SELECT * FROM accesos WHERE LOGIN='".$this->login."' AND PASSWORD='".$this->passw."'";
			
			$aute=$this->query->consultar($sqlb, $this->db);
			
			$filas=mysql_fetch_array($aute);
			
			if ($this->query->numero_registros($aute)==1){
				session_start();
				@extract($filas);
				$_SESSION["registrado"]="SI";
				$_SESSION["usuario"]=$LOGIN;
				$_SESSION["nivel"]=$NIVEL;
				$_SESSION["nombre"]=$DESCRIPCION;
				header("Location:principal.php");
				exit();	
				return 1;			
			}else
				return 0;
	  	}  	
	}
?>
  #6 (permalink)  
Antiguo 18/01/2007, 11:12
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Problemas con autentificación de usuarios

Hola upatseb: por si tiene algo que ver, mira lo que dice www.php.net sobre session_register()

Cita:
Si está usando $_SESSION (o $HTTP_SESSION_VARS), no use session_register(), session_is_registered(), ni session_unregister().
http://es2.php.net/manual/es/functio...n-register.php

Aunque no te resuelva tu problema, yo creo que no necesitas usarla. Un saludo.
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 22:56.