Ver Mensaje Individual
  #8 (permalink)  
Antiguo 08/06/2011, 11:35
Avatar de stramin
stramin
 
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: sesiones de php!

Cita:
Iniciado por j0s3bdn Ver Mensaje
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at e:\www\jueves\pagina-php\registro1.php:6) in e:\www\jueves\pagina-php\registro1.php on line 49

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at e:\www\jueves\pagina-php\registro1.php:6) in e:\www\jueves\pagina-php\registro1.php on line 49

me da este error al guardar el nombre del usuario en una sesion! gracias x vuestros aportes! como puedo solucionarlo? gracias!
como dijo iviamontes, cuando declaras session_start(); abres las variables de sesión de PHP, estas variables se inicializan antes de mostrar la página, por lo tanto si cambias el cabezal de la página es que la página ya ha comenzado a generarse, cuando muestras texto, ya sea por que usas un echo() o escribes código html PHP convierte el cabezal a texto y por lo tanto ya no podrás iniciar sesiones.

en otras palabras esto no funciona:
Código PHP:
Ver original
  1. <html><?php session_start(); ?>
ya que al poner texto indicas que la página debe empezar a generarse.

esto tampoco funciona:
Código PHP:
Ver original
  1. <?php echo "<html>"; session_start(); ?>
ya que tambien si imprimes con PHP se genera la página como html.

este es un error muy común:
Código PHP:
Ver original
  1. <?php session_start(); ?>
al poner un espacio antes de abrir el tag de PHP también envías texto (un salto de linea, por lo tanto también genera la página.

este caso si funcionaría:
Código PHP:
Ver original
  1. <?php $x=2*3; $texto="pinguino"; $minitexto=substr($texto,0,2); session_start(); ?>
ya que las instrucciones de PHP que no muestren contenido en la página no envían cabezales

sin embargo esta tampoco funciona:
Código PHP:
Ver original
  1. <?php $x=3/0; session_start(); ?>
ya que al cometer un error de division de 0 aparece un mensaje en pantalla, al mostrar un mensaje es como poner un echo (lo mismo ocurre con die("error");)

tampoco puedes iniciar sesiones si tu mismo cambias el cabezal!:
Código PHP:
Ver original
  1. <?php header("..."); session_start(); ?>
la razón es obvia XD

también algunas instrucciones de php para generar archivos como imágenes, pdf, excel, etc cambian automáticamente el cabezal por lo tanto también tendrás error:
Código PHP:
Ver original
  1. <?php $img=imagecreatefrompng("..."); imagepng($img); session_start(); ?>
en este caso el cabezal se envía como "imagen/png"

y tampoco puedes iniciar la sesión 2 veces:
Código PHP:
Ver original
  1. <?php session_start(); $x=1; session_start(); ?>

para evitar estas explicaciones la gente simplemente opta por no poner nada antes de <? session_start(); sin embargo esto es un mito informático, puedes poner todo lo que quieras antes mientras no muestres nada.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D