Foros del Web » Programando para Internet » PHP »

Problema con codigo: sesiones y cabeceras enviadas ...

Estas en el tema de Problema con codigo: sesiones y cabeceras enviadas ... en el foro de PHP en Foros del Web. El problema es que ya no tengo los servidores en mi poder, ahora lo hospedo en un hosting, lebante el codigo, sin problemas, pero me ...
  #1 (permalink)  
Antiguo 21/11/2006, 11:39
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Problema con codigo: sesiones y cabeceras enviadas ...

El problema es que ya no tengo los servidores en mi poder, ahora lo hospedo en un hosting, lebante el codigo, sin problemas, pero me sale un error en todas las paginas. El error es el siguiente:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/teamljub/public_html/team/prueba2/ver.php:2) in /home/teamljub/public_html/team/prueba2/ver.php on line 3

Al parecer es algo sobre las sesiones, y el codigo de las sesiones es el siguiente:

Código PHP:
<?  
session_start
();  
echo 
$_SESSION['usuario'];  
if(empty(
$_SESSION['usuario'])) {  
  
header("location: noautorizado.php");  
  exit;
}  

if (
$_SESSION['usuario_nivel'] != "100"){  
  
header("location: noautorizado_nivel.php");  
  exit;  
}  

?>
Por favot si alguien me puede ayudar??

NOTA: Este codigo me funcionaba sin problemas cuando yo tenia los servidores web y correo.
  #2 (permalink)  
Antiguo 21/11/2006, 11:43
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 19 años, 5 meses
Puntos: 1
Que tal. No puede haber nada impreso antes de Header eso es lo que te quiere decir el error y lo tienes cuando haces echo $_SESSION['usuario']; el cdigo quedaria asi:
Código PHP:
<?  
session_start
();  
if(empty(
$_SESSION['usuario'])) {  
  
header("location: noautorizado.php");  
  exit;
}  

if (
$_SESSION['usuario_nivel'] != "100"){  
  
header("location: noautorizado_nivel.php");  
  exit;  
}  
echo 
$_SESSION['usuario'];
?>
Espero que te sirva... Saludos
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #3 (permalink)  
Antiguo 21/11/2006, 12:22
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Pasa lo mismo :(
  #4 (permalink)  
Antiguo 21/11/2006, 12:37
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Problema sesion

Cita:
Iniciado por hulray Ver Mensaje
El problema es que ya no tengo los servidores en mi poder, ahora lo hospedo en un hosting, lebante el codigo, sin problemas, pero me sale un error en todas las paginas. El error es el siguiente:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/teamljub/public_html/team/prueba2/ver.php:2) in /home/teamljub/public_html/team/prueba2/ver.php on line 3

Al parecer es algo sobre las sesiones, y el codigo de las sesiones es el siguiente:

Código PHP:
<?  
session_start
();  
echo 
$_SESSION['usuario'];  
if(empty(
$_SESSION['usuario'])) {  
  
header("location: noautorizado.php");  
  exit;
}  

if (
$_SESSION['usuario_nivel'] != "100"){  
  
header("location: noautorizado_nivel.php");  
  exit;  
}  

?>
Por favot si alguien me puede ayudar??

NOTA: Este codigo me funcionaba sin problemas cuando yo tenia los servidores web y correo.
  #5 (permalink)  
Antiguo 21/11/2006, 12:41
Avatar de omegafunky  
Fecha de Ingreso: diciembre-2003
Ubicación: Tabasco, Mexico
Mensajes: 3.534
Antigüedad: 20 años, 4 meses
Puntos: 33
creo k no puedes imprimir algo con echo y despues hacer un header
__________________
Canon 7D | Canon 5D Mark II | 35mm 1.4L | 135mm 2L | Pocket Wizard Plus III
  #6 (permalink)  
Antiguo 21/11/2006, 12:44
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Pues si no tienes ningun tipo de salida hacia al explorador antes de la funcion header(), checa lo que te menciona omegafunky, entonces puede que tu hosting este enviando "cabeceras" antes de las tuyas y por eso se este generando el error, tendrias que "platicar" con hosting para ver la forma en como puedes solucionar este problema.

Aunque en tu código lo que podrias hacer es lo siguiente:

Código PHP:
<?   
session_start
();   
echo 
$_SESSION['usuario'];   
if(empty(
$_SESSION['usuario'])) {  
 echo 
"
?>
  <script language='javascript'>
  window.location = 'noautorizado.php';
 </script>
<?php
 "
;
 
// header("location: noautorizado.php");   
  
exit; 
}   

if (
$_SESSION['usuario_nivel'] != "100"){   
  
//header("location: noautorizado_nivel.php");   
 
echo "
?>
  <script language='javascript'>
  window.location = 'noautorizado_nivel.php';
 </script>
<?php
 "
;
  exit;   
}   

?>
Saludillos.
  #7 (permalink)  
Antiguo 22/11/2006, 11:35
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Tendran algo que ver las cookie???, porq me sale este mensaje

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/teamljub/public_html/team/multiUserLog-In/welcome.php:2) in /home/teamljub/public_html/team/multiUserLog-In/welcome.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/teamljub/public_html/team/multiUserLog-In/welcome.php:2) in /home/teamljub/public_html/team/multiUserLog-In/welcome.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at /home/teamljub/public_html/team/multiUserLog-In/welcome.php:2) in /home/teamljub/public_html/team/multiUserLog-In/welcome.php on line 6
  #8 (permalink)  
Antiguo 22/11/2006, 11:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Fijate bien en el mensaje de error . .e intenta interpretarlo:

Dice que tienes esa "salida" generada en la línea 2 de welcome.php
Cita:
output started at .... welcome.php:2
No sé si indicas el código completo que usas o extraes parte de el .. Tampoco nos aseguras si antes de <? tienes algún espacio o salto de línea .. todo eso -es- considerado como una "salida".

Si usas servicios de hosting "gratuitos" .. estos suelen meter su publicidad como parte de las cabeceras de tus páginas que salen de ese servidor .. así que para cuando tu llegas con las tuyas .. antes ya se insertaron otras. Ojo con esto también.

El tema de que en el mensaje de error que obtienes mencinoe "cookies" es por el tipo de propagación del SID que haces y que PHP intenta crear una cookie para propagar dicho SID (si no sabes que es eso, .. te invito a documentarte: www.php.net/session)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 22/11/2006, 13:28
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Solucione el problema, y se los dire para que no cometan el mismo problema:

Como mi servidor anterior estaba con sistema operativo Windows 2003, y el hosting que contrate usa linux, ese fue el problema, linux es mas detallista en la programacion, como por ejemplo, discrimina mayusculas, espacios, etc.

Pero el problema era, que antes de llamar el session_start() , no tiene que haber nada escrito, en mi caso: "<div align="right">Bienvenido:"

Código PHP:
<div align="right">Bienvenido:
<?  
session_start
();  
echo 
$_SESSION['usuario'];  
if(empty(
$_SESSION['usuario'])) {  
  
header("location: noautorizado.php");  
  exit;
}  

if (
$_SESSION['usuario_nivel'] != "100"){  
  
header("location: noautorizado_nivel.php");  
  exit;  
}  

?>
Como puedo poner el nombre de la sesion al lado izquierdo?, si no puedo escribir nada al principio?
  #10 (permalink)  
Antiguo 22/11/2006, 14:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Como puedo poner el nombre de la sesion al lado izquierdo?, si no puedo escribir nada al principio?

El problema que tienes es que estás pensando como si escribieses "HTML" sólo .. y ves a todo el código PHP + tu HTML en forma secuencial. Este tipo de "pensamiento" debes olvidarte de el.

Fijate bien que hace tu código:

1) PHP interpreta su parte .. y de su resultado así genera cierto HTML si corresponde. Es decir "le das salida" a ese HTML en forma "dinámica.

2) En algunas condiciones .. si se originan (esos "if()") tu redireccionas a cierta página. En ese caso .. piensa: de que te sirve haber presentado un "echo "algo"" si conociendo que PHP se ejecuta -antes- que tu HTML pueda llegar a tu navegador y más encima las cabeceras HTTP se ejecutan o se "mandan" a tu navegador antes de que este ejecute el resto de HTML que puedas enviar (HTML/javascirpt,etc) ?.. No tiene sentido en ese caso ese HTML por delante .. NUNCA llegará al cliente si tu redireccionas ( y es justamente lo que te avisa PHP .. que pretendes hacer esa situación que no es correcto).

Tu código "ordenado" y correcto tendría que quedar tipo:

Código PHP:
<?   
session_start
();   

// Aquí validas una variable de sesió o condición en general .. si no se cumple el resto del script o página a generar NO se ejecutará nunca .. tu ya terminas la ejecución del script en este punto y redireccionas . .abandonas este script en este punto (en el "exit").
if(empty($_SESSION['usuario'])) {   
  
header("location: noautorizado.php");   
  exit; 
}   

// aquí tienes otra validación .. sucede lo mismo que en el caso anterior.
if ($_SESSION['usuario_nivel'] != "100"){   
  
header("location: noautorizado_nivel.php");   
  exit;   
}   

// Si tus validaciones "PHP" pasan .. aquí generas una página concreta. Así que respeta su HTML correcto .. con tu definición de "<html> sus <head> y sus <body> según dicta el standar HTML

?> 
<html>
<head>
</head>
<body>
<div align="right">Bienvenido: <? echo $_SESSION['usuario']; ?>
</body>
</html>
Si te fijas aquí se "piensa" como funciona PHP .. como se procesan cabeceras HTTP y en consecuencia se ordena el código para tal fin.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 22/11/2006, 14:56
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
Gracias Cluster
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 07:41.