Foros del Web » Programando para Internet » PHP »

Problema con sesiones

Estas en el tema de Problema con sesiones en el foro de PHP en Foros del Web. ¡Hola! Estoy programando en php y javascript y tengo 1 problemilla con el uso de sesiones. Hasta ahora me funcionaban bien las sesiones, pero al ...
  #1 (permalink)  
Antiguo 27/08/2007, 00:43
 
Fecha de Ingreso: febrero-2007
Mensajes: 138
Antigüedad: 17 años, 2 meses
Puntos: 0
Problema con sesiones

¡Hola! Estoy programando en php y javascript y tengo 1 problemilla con el uso de sesiones. Hasta ahora me funcionaban bien las sesiones, pero al introducir la identificación del usuario y la seguridad en mi programa me está fallando.

El problema es el siguiente:

Yo, para autentificar al usuario uso el siguiente script (el login y el password lo paso de un formulario):
Código PHP:
<?
include("C:\server\web\BDFPSalesianos\Otros\conexion.php");

//Sentencia SQL para buscar un usuario con esos datos
$login=$_POST["login"];
$password=$_POST["password"];
$sql "SELECT * FROM profesores WHERE ((login='".$login."') && (password='".$password."'))";
$result mysql_query($sql$GLOBALS["miConexion"]) or die(mysql_error());


//vemos si el usuario y contraseña es váildo
//si la ejecución de la sentencia SQL nos da algún resultado
//es que si que existe esa combinación usuario/contraseña


if (mysql_num_rows($result)!=0){
    
//usuario y contraseña válidos
    //defino una sesion y guardo datos
        
session_start();
    
    
$fila mysql_fetch_assoc($result);
       
    
$_SESSION['autentificado'] = "SI";
    
    
header ("Location: http://localhost/BDFPSalesianos/index.php?login=".$fila['login']."");
        
}else {
    
//si no existe le mando otra vez a la portada
    
header("Location: autentificacion.php?errorusuario=si");
}

?>
Y para saber si un usuario está autenificado bien uso la variable de sesión 'autentificado', de manera que para aumentar la seguridad en mi programa uso el siguiente script (que incluyo en todos los script que quiero mantener seguros, todos los de la base de datos):

seguridad.php:
Código PHP:
<?
session_start
();

if (
$_SESSION['autentificado'] != "SI") {
    
//si no existe, envio a la página de autentificacion
    
header("Location: autentificacion.php");
    
//ademas salgo de este script
    
exit();
}
?>
Lo incluyo de la siguiente manera:

include("C:\server\web\BDFPSalesianos\Autentificac ion\seguridad.php");

Además en todos los script también incluyo la conexión a la base de datos:

include("C:\server\web\BDFPSalesianos\Otros\conexi on.php");

El fichero conexion.php contiene:

Código PHP:
<?
$miConexion 
mysql_connect("localhost","root","root");
mysql_select_db("bdfpsalesianos"$miConexion); 
?>
Y al ejecutar cualquier script en los que incluya el script 'seguridad.php' y en el que no esté la sentencia 'session_start();' aparece el mensaje de error:

Warning: Cannot modify header information - headers already sent by (output started at C:\server\web\BDFPSalesianos\Otros\menuProfesor.ph p:12) in C:\server\web\BDFPSalesianos\Autentificacion\segur idad.php on line 6

¿Por qué aparece? No tengo la sentencia 'session_start();' en todos los acript porque hay algunos que no acceden a ninguna variable de sesión.

Espero que me podais ayudar, muchas gracias.
  #2 (permalink)  
Antiguo 27/08/2007, 05:33
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: Problema con sesiones

Tu problema radica en el lugar en el que incluyes tus ficheros.

Estás intentando enviar una cabecera (Header...) después de haber enviado contenido de la página. Las cabeceras se han de enviar lo primero.

No pones dónde incluyes el fichero "seguridad.php" pero a buen seguro que no es la primera línea de "menuProfesor.php". En el fichero "seguridad.php" intentas enviar una cabecera, por lo que no puedes haber enviado antes nada de contenido, ni un espacio.

Este ejemplo no funcionará porque se han enviado un par de líneas antes del Header...

Código PHP:
<HTML>
<HEAD>
<?php 
  header
("Location: autentificacion.php"); 
  ....
Incluso éste tampoco va porque antes del header hay una línea vacía (un espacio en HTML)

Código PHP:

<?php 
  header
("Location: autentificacion.php"); 
  ....
Un fichero 'incluido' se comporta como si estuviera escrito entero en el lugar donde se hace el include...

Deberías hacer el include lo primero dentro de menuProfesor.php de tal manera que el primer carácter del fichero sea el "<" que abre php:

Código PHP:
<?php include("C:\server\web\BDFPSalesianos\Autentificacion\seguridad.php"); ?>
__________________
Kelpie
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 17:30.