Problemas con session_start(): Cannot send session cache limiter

publicado por: Anonymous

Estoy haciendo un inicio de sesión usando el modelo MVC en PHP y tengo un problema de

Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at C:xampphtdocsbackEndEmisoraSanJoseObreroviewsmodulesnavegacion.php:1) in C:xampphtdocsbackEndEmisoraSanJoseObrerocontrollerscontroller.php on line 43

y

Warning: Cannot modify header information – headers already sent by (output started at C:xampphtdocsbackEndEmisoraSanJoseObreroviewsmodulesnavegacion.php:1) in C:xampphtdocsbackEndEmisoraSanJoseObrerocontrollerscontroller.php on line 42**

Al querer trabajar con las sesiones

El Formulario es este:

_x000D_

_x000D_

<center>_x000D_
	<div class="admin">_x000D_
		<h1 class="ingresoTitle">Inicio de Sesion del Administrador</h1>_x000D_
		<form method="post">_x000D_
				<input type="text" placeholder="Usuario" name="usuarioIngreso">_x000D_
				<input type="password" placeholder="Contraseña" name="passwordIngreso">_x000D_
				<input type="submit" value="Enviar">_x000D_
		</form>	_x000D_
	</div>	_x000D_
</center>_x000D_
_x000D_
<?php  _x000D_
$ingreso = new MvcController(); //Creamos un nuevo objeto_x000D_
$ingreso -> inicioSesionController(); //llamamos la funcion_x000D_
?>

_x000D_

_x000D_

_x000D_

Y el código PHP que maneja el formulario éste:

public function inicioSesionController(){


    if (isset($_POST['usuarioIngreso'])) {

        if ($_POST['usuarioIngreso'] == 'admin') {
            header('location=ok');
            session_start();
            $_SESSION['user']= true;
        }

    }
}
}

Llevo días mirando mi código, cambiando y probando y no encuentro el problema.

Para entrar al formulario se usa un enlace GET que es ?action=admin

El código completo en GitHub:https://github.com/darguello1998/emisorasanjoseobrerofm

Lo raro es que este inicio de sesión usa la misma técnica y no lanza error
https://github.com/darguello1998/iniciodesesiomvc

solución

Respecto de tu código:

  • Si vas a trabajar con sesiones, y tu tu php.ini no tiene session.auto_start habilitado, tú mismo inicializas la sesión y es de las primeras cosas que haces. No lo haces dentro de un método.
  • si imprimes texto (en tu caso imprimes el HTML primero) no puedes modificar los headers a posteriori. Los header se enviaron implícitamente apenas escribiste un caracter. Misma cosas con las sesiones, no puedes meterle mano después que se enviaron los headers.
  • header('location=ok') me intriga. ¿Es un código arbitrario que quieres luego inspeccionar desde el front? Porque si quisieras redirigir, entonces la sintaxis sería header(‘Location: URL_DESTINO’);. Supongamos que está ahí para efectos de debug y no tiene efectos secundarios.

Resumiendo:

<?php  
session_start();
$ingreso = new MvcController(); //Creamos un nuevo objeto
$ingreso->inicioSesionController(); //llamamos la funcion
?>

<center>
    <div class="admin">
        <h1 class="ingresoTitle">Inicio de Sesion del Administrador</h1>
        <form method="post">
                <input type="text" placeholder="Usuario" name="usuarioIngreso">
                <input type="password" placeholder="Contraseña" name="passwordIngreso">
                <input type="submit" value="Enviar">
        </form> 
    </div>  
</center>

Y quitas el session_start del método MvcController::inicioSesionController


Tip:

MVC es un patrón de diseño (o patrón de arquitectura de software), no un modelo. Si dices “Modelo MVC” es como decir “Modelo Modelo Vista Controlador“. Tienes que aprender esas cosas para que cuando llegue alguien del área comercial puedas marearlo con terminología que no entienda, pero siempre cuidándote de citar la terminología correcta. Es un tip para lidiar con jefes y clientes.

Para ser mas exacto, MVC NO es un patrón de diseño, sino un patrón Arquitectónico.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published.