30/05/2013, 05:09
|
| | Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 12 años, 1 mes Puntos: 2 | |
Error al cerrar sesion: Warning: Cannot modify header information Hola a todos. Estoy con el tema de las sesiones php y al cerrar la sesión me da el error Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/superguardian/app/vistas/menu.php:105) in /opt/lampp/htdocs/superguardian/app/controladores/login.php on line 18
El caso es que inicia sesión correctamente y de hecho la cierra pero en vez de volver al archivo index me saca ese error. El index.php
Código:
<?php
session_start();
//$_SESSION["centro"] = 1;
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="estilos/css/index.css" title="style">
<!--Hacer limpio el siguiente código más adelante-->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><!--Librería de Jquery-->
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script><!--Librería de Jquery UI-->
<!--IMPORTACION DE JS-->
<script type="text/javascript" src="../librerias/scripts/openwysiwyg/scripts/wysiwyg.js"></script>
<script type="text/javascript" src="../librerias/scripts/openwysiwyg/scripts/wysiwyg-settings.js"></script>
<!--Carga de todos los js de comprobaciones-->
<script type="text/javascript" src="../app/js/comprobaciones/formularios.js"></script>
<!--Funciones de jquery tales como la carga de tabs dinámicos-->
<script type="text/javascript" src="../app/js/funciones_jquery_ui.js"></script>
<!--Carga el js de ventanas emergentes-->
<!--AL CARGAR LA PÁGINA-->
<script type="text/javascript" >
$( document ).ready(function() {
//Para que un div se abra con el efecto
$( ".highlight" ).show( "highlight" );
$( ".blind" ).show( "blind",1000 );
//Multiple checks
$("#check_todos").click(function(event){
if($(this).is(":checked")) {
$(".casilla:checkbox:not(:checked)").attr("checked", "checked");
}else{
$(".casilla:checkbox:checked").removeAttr("checked");
}
});
});
//Clona la lista de clases de ese centro que hay donde se cambian de clase los alumnos y la añade a la parte de filtros.
//Hace uso de DOM para ello.
$( document ).ready(function() {
cloneNode=document.getElementById("clases_para_cambiar").cloneNode(true);
document.getElementById("filtro_aula").appendChild(cloneNode);
//Quedaría ver cambiar el name.
});
</script>
<script>
$(function() {
$( "#dialog_email" ).dialog({
autoOpen: false,
width:800,
show: {
effect: "puff",
duration: 500
},
hide: {
effect: "puff",
duration: 500
}
});
$( "#email" ).click(function() {
$( "#dialog_email" ).dialog( "open" );
});
});
</script>
<!--CÓDIGO PARA QUE LOS BOTONES SE AJUSTEN AL TEMA DE JQUERY UI-->
<!-- <script>
$(function() {
$( "input[type=submit], input[type=reset]")
.button()
.click(function( event ) {
event.preventDefault();
});
});
</script> -->
<script type="text/javascript">
//Script para hacer visibles los submenus del menu principal.
/*$(document).ready(function() {
$('.menu li:has(ul)').hover(function(e){
$(this).find('ul').css({display: "block"});
},
function(e){
$(this).find('ul').css({display: "none"});
});
});*/
</script>
</head>
<body>
<?php include('../app/includes_y_requires.php')?>
<!--INICIO DEL CONTENIDO-->
<div id="contenedor">
<div id="top">
<div><span onclick=" document.location.href = 'index.php?c=1'">SUPERGUARDIÁN</span></div>
<div>
<input type="text" class="search" size="50" />
<button type="button" onclick="session_destroy()">Buscar</button>
</div>
<div><?php
include("../app/vistas/menu.php");
?>
</div>
</div>
<!--Fin de menú-->
<div id="principal">
<div id="central">
<?php
if(isset($_SESSION["login"])) {
//$accionPredefinida ="nueva_alta";
if(!empty($_GET['controlador'])){
$controlador = $_GET['controlador'];
if(! empty($_GET['accion']))
$accion = $_GET['accion'];
else{
// $accion = $accionPredefinida;
}
//Ya tenemos el controlador y la accion.
//Formamos el nombre del fichero que contiene nuestro controlador
$controlador = "../app/controladores/".$controlador.".php";
//Incluimos el controlador o detenemos todo si no existe
if(is_file($controlador))
require_once $controlador;
else
die('El controlador no existe - 404 not found');
//Llamamos la accion o detenemos todo si no existe
if(is_callable($accion))
$accion();
else
// die('La accion no existe - 404 not found');
echo "NO SE HA SOLICITADO UNA ACCIÓN";
}
if(empty($_GET['controlador']) && empty($_GET['accion'])){
//require_once"../app/vistas/nuevo_alumno.php";
include("../app/vistas/listar_alumnos.php");
}
}//Fin del if de comprobación de logueado
else {
?>
<form method="POST" action="../app/controladores/login.php"">
<span class="b">ACCESO: </span>
<span>Usuario</span><input type='text' name="user" value=" " size="10"/>
<span>Contraseña</span><input type='password' name="pass" value="" size="10"/>
<input type="submit" value="Entrar"/>
</form>
<?php
}
?>
</div>
<!--Fin de central-->
<div id="derecha">
</div>
<!--Fin de derecha-->
</div>
<!--Fin de principal-->
</div>
<!--Fin de contenedor-->
</body>
</html>
Su controlador.php
Código:
<?php
//Si se envía el formulario de login llama a login (modelo) con los parámetros de usuario y contraseña.
if(isset($_POST['user'])) {
require '../modelos/conexion.php';
require '../modelos/login.php';
$u=$_POST['user'];
$p=$_POST['pass'];
login($u,$p);
}
function cerrar_sesion() {
// Destruir todas las variables de sesión.
$_SESSION = array();
// Si se desea destruir la sesión completamente, borre también la cookie de sesión.
// Nota: ¡Esto destruirá la sesión, y no la información de la sesión!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finalmente, destruir la sesión.
session_destroy();
header("Location: ../../publico/index.php?");
}
?>
Y su modelo.php
Código:
<?php
function login($u,$p){
session_start();
global $servidor, $bd, $usuario, $contrasenia;
try{
@ $db = new mysqli($servidor, $usuario, $contrasenia);
if (mysqli_connect_errno() != 0)
throw new Exception('Error conectando:'.mysqli_connect_error(), mysqli_connect_errno());
$db->select_db($bd);
if ($db->errno != 0)
throw new Exception('Error seleccionando bd:'.$db->error, $db->errno);
$consulta = $db->query("SELECT * FROM usuarios WHERE email='".$u."' AND password='".$p."'");
if (mysqli_num_rows ($consulta) > 0){
$_SESSION['login']=1;
header("Location: ../../publico/index.php");
}
else {
echo "Usuario o contraseña no coinciden";
}
if ($db->errno != 0)
throw new Exception('Error realizando consulta:'.$db->error, $db->errno);
$db->close();
}catch (Exception $e){
echo $e->getMessage();
if (mysqli_connect_errno() == 0)
$db->close();
exit();
}
return $consulta;
}
?>
Y el del menu.php
Código:
<ul class="menu"><img src="../pruebas/cara.jpg" alt="Configuración"/>
<li><a>Perfil</a></li>
<li><a href="#">tyutyuy</a></li>
<li><a href="index.php?controlador=login&accion=cerrar_sesion">Salir</a></li>
</ul>
He visto soluciones del tipo comentar x linea en php.ini y cosas como que puede ser algún espacio. No quiero hacer trampas al servidor y no creo que tenga ningún espacio o carácter raro.
¿De que podría venir el fallo?
Última edición por yafuslae; 30/05/2013 a las 05:11
Razón: olvidé el menu.php
|