Foros del Web » Programando para Internet » PHP »

Problema con sesiones y headers

Estas en el tema de Problema con sesiones y headers en el foro de PHP en Foros del Web. Hola amigos: les cuento mi problema (estoy segura que es una pavada, pero no se como solucionarlo!!). Yo tengo en la pagina de inicio definida ...
  #1 (permalink)  
Antiguo 31/08/2005, 07:58
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 18 años, 10 meses
Puntos: 1
Problema con sesiones y headers

Hola amigos: les cuento mi problema (estoy segura que es una pavada, pero no se como solucionarlo!!).

Yo tengo en la pagina de inicio definida mi sesion asi :

<?
session_start();
$HTTP_SESSION_VARS['variable'] = "Miguel";
?

Y en la pagina siguiente :

<?session_start();
if( isset($HTTP_SESSION_VARS['variable'] )) {
if($HTTP_SESSION_VARS['variable'] == "Miguel") {
print "Todo en regla - OK!"; } else {
print "Variable distinta - Acceso Denegado"; }
} else {
print "No está iniciada la variable - Acceso Denegado";
} .........

header ("Location:tabla.php?dato=".$camaras);

(la pagina hasta que le agrege la sesion andaba ok.

Como puedo solucionar mi problema? me ayudan?
Gracias, saludos
  #2 (permalink)  
Antiguo 31/08/2005, 08:10
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
El script, tal como está, siempre escribe algo en el cliente, por tanto header() no te va a funcionar, debes adecuar tu codigo de manera que nunca escribas en el cliente antes de usar header(). Puedes por ejemplo llamar a otro script que muestre los errores.
  #3 (permalink)  
Antiguo 31/08/2005, 08:20
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 18 años, 10 meses
Puntos: 1
Claudio: entonces tendria que hacer el ingreso y dirigirlo a un script donde chequee la sesion y de ahi dirigirlo a otro donde analice el usuario , la contraseña y de ahi lo permita pasar al home?
  #4 (permalink)  
Antiguo 31/08/2005, 08:30
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Puede ser asi:

Código PHP:
<?php
   session_start
();
   if( isset(
$HTTP_SESSION_VARS['variable'] )) {
      if(
$HTTP_SESSION_VARS['variable'] == "Miguel") {
        
header("location: siguiente_pagina.php");
        exit();        
      } 
      else {
         
$mensaje="Usuario NO Autorizado";
         
header("Location: pagina_error.php?error=$mensaje");
         exit();
      }
   } 
   else {
       
$mensaje="Sesion no Iniciada";
       
header("Location: pagina_error.php?error=$mensaje");
       exit();
   } 
?>
  #5 (permalink)  
Antiguo 31/08/2005, 08:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En la página que validas .. no debes arrojar ninguna salida al navegador .. es decir, tus mensajes de error o exito debes presentarlos en otra página (script) .. o bien -sólo- redireccionar a la página autorizada si pasa tu validación, mostrando su mensaje de "exito" en dicha página .. no en la que valida:

Código PHP:
<?session_start();
if( isset(
$HTTP_SESSION_VARS['variable'] )) {
   if(
$HTTP_SESSION_VARS['variable'] == "Miguel") {
// si todo va bien .. pasó tu autentificación .. redireccionas:
       
header ("Location:tabla.php?dato=".$camaras); 
       exit; 
// y terminas la ejecución del script .. ya estás cambiando a otro .. 
   
} else {
       print 
"Variable distinta - Acceso Denegado"; }
} else {
       print 
"No está iniciada la variable - Acceso Denegado";
}
?>
ó .... Lo ideal: Redireccionar a una página dedicada a mostrar tus mensajes de error/exito tipo:

mensajes.php
Código PHP:
<?
echo "mensaje: ".$_GET['mensaje']
?>
y tu "validar.php" sería algo tipo:

validar.php
Código PHP:
<?session_start();
if( isset(
$HTTP_SESSION_VARS['variable'] )) {
   if(
$HTTP_SESSION_VARS['variable'] == "Miguel") {
       
header ("Location:tabla.php?dato=".$camaras); 
       exit;
   } else {
       
header ("Location: mensajes.php?mensaje=mensaje1";
       exit;    
    }
} else {
       
header ("Location: mensajes.php?mensaje=mensaje2");
       exit;
}
?>
Por lo demás .. usa preferentemente (si usas PHP 4.1.0 en adelante) el array $_SESSION .. no el "HTTP_SESSION_VARS" .. y no uses tampoco "session_register()" si es que lo usas .. usa sólo $_SESSION (más info: www.php.net/sesssion)

Un saludo,
  #6 (permalink)  
Antiguo 31/08/2005, 08:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
UN detallito claudiovega: si pasas una frase por el URL con espacios (o acentos y demás caracteres) tendrás que "parsearla" en formato URL standar con urlencode():

Código PHP:
         $mensaje="Usuario NO Autorizado"
         
header("Location: pagina_error.php?error=".urlencode($mensaje)); 
         exit(); 
Un saludo,
  #7 (permalink)  
Antiguo 31/08/2005, 08:57
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 18 años, 10 meses
Puntos: 1
Chicos estoy probando pero no llego a la solucion. yo no puedo despues de comprobar la sesion enviarlo a la pagina tabla.php, es decir:
Código PHP:
<?session_start(); 
if( isset(
$HTTP_SESSION_VARS['variable'] )) { 
   if(
$HTTP_SESSION_VARS['variable'] == "Miguel") { 
// si todo va bien .. pasó tu autentificación .. redireccionas: 
       
header ("Location:tabla.php?dato=".$camaras);
Porque primero tengo que ver si o si si el usuario y la contraseña estan en la BD y le muestro algunas cosas de acuerdo al usuario que sea.

Este es mi script original sin sesion.
Código PHP:
<? 
$enviados 
array_values($HTTP_POST_VARS);
$usuario$enviados[0];
$contrasena$enviados[1];

//conecto con la base de datos 
$conn mysql_connect("localhost","root",""); 

//Sentencia SQL para buscar un usuario con esos datos 
$ssql "SELECT * FROM usuario WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'"

//Ejecuto la sentencia 
$rs mysql_db_query("acceso",$ssql,$conn); 

if (
mysql_num_rows($rs)!=0){ 
//usuario y contraseña válidos 
while ($row=mysql_fetch_array($rs)) {
$camaras $row[2];


header ("Location:tabla.php?dato=".$camaras); 
}else { 
//si no existe le mando otra vez a la portada 
header("Location:noentra.htm"); 
}
mysql_close($conn); 
?>
Osea, si yo en este script solo chequeara la sesion, y luego lo paso a otro para ver si esta en la BD, tengo qeu enviar nuevamente los datos de usuario y contraseña?.

Gracias! saludiños.

Última edición por Cluster; 31/08/2005 a las 09:40
  #8 (permalink)  
Antiguo 31/08/2005, 09:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Incluye tu validación de tu variable de sesión en tabla.php .. al principio antes de cualquier HTML o demás código que pudieras tener. Recuerda que ese código lo vas a usar para "validar" que se esté ingresando a tu script (tabla.php) correctamente . .si no existe tu variable de sesión .. es que no se autentificó el usuario .. por ende NO corresponde seguir con la ejecución del script .. momento en el cual puedes redireccionar por ejemplo a tu script de "login" que uses:

tabla.php
Código PHP:
<?
session_start
();
if (empty(
$_SESSION['variable'])){
header("Location: login.php");
exit; 
// IMPORTATE! terminar la ejecución del script en este punto.
}

/* No hace falta un "else" .. para eso ya hacemos el exit!.
 resto de tu script .. o página en general .... */

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 19:02.