Gestion de sesiones PHP

Nucklear

Hola estoy haciendo una página web en PHP y tengo un problema con la gestión de sesiones.

El usuario llega a una página de inicio index.php mostrando una cabecera con lo siguiente:

INICIO |SOCIAL |MAPA DEL SITIO |RSS |LOGIN |REGISTRO

Una vez que pulsa login y se valida se recarga la página con una cabecera con estos valores:

INICIO |SOCIAL |MAPA DEL SITIO |RSS |LOGOUT

El problema que tengo es en el cambio de cabecera ya que siempre muestra la primera y ya de paso que me recomendaseis un buen sistema para la gestión de sesión de usuarios.

Para la sesión lo que estoy haciendo ahora mismo es esto:

validate.php

//Se valida el usuarios en la DB

if($count==1){
	session_start();
	$_SESSION['logged'] = true;
	
if($_SESSION['logged']){
	header("location: index.php"); 
}
}
else {
	echo "Nombre de usuario o contraseña incorrectos";
}

header.php

<?php 
if(!isset($_SESSION['logged'])){
echo	'<div id="header">';
echo		'<div class="center">';
echo			'<a href="#"><img id="logo" src="images/logo.png" alt="Home" />';
echo			'</a>';
echo			'<ul>';
echo				'<li><a href="#">INICIO</a> |</li>';
echo				'<li><a href="#">SOCIAL</a> |</li>';
echo				'<li><a href="#">MAPA DEL SITIO</a> |</li>';
echo				'<li><a href="#">RSS</a> |</li>';
echo				'<li><a href="login.php">LOGIN</a> |</li>';
echo				'<li><a href="#">REGISTRO</a></li>';
echo			'</ul>';
echo		'</div>';
echo	'</div>';
}
else{
echo	'<div id="header">';
echo		'<div class="center">';
echo			'<a href="#"><img id="logo" src="images/logo.png" alt="Home" />';
echo			'</a>';
echo			'<ul>';
echo				'<li><a href="#">INICIO</a> |</li>';
echo				'<li><a href="#">SOCIAL</a> |</li>';
echo				'<li><a href="#">MAPA DEL SITIO</a> |</li>';
echo				'<li><a href="#">RSS</a> |</li>';
echo				'<li><a href="login.php">LOGOUT</a></li>';
echo			'</ul>';
echo		'</div>';
echo	'</div>';
}
?>

Es la primera vez que me pongo con PHP así que todo esto es nuevo para mi y estoy un poco perdido. Cualquier ayuda es bienvenida.

Un saludo.

themaz

usa un session_start(); al principio de pagina donde salga el menú a ver si te soluciona el problema.

3 respuestas
Nucklear

#2 Probado y no va.

themaz

prueba a utilizar : session_register ( http://php.net/manual/es/function.session-register.php ), por ejemplo registra una session con un identificador, por ejemplo nick.

Luego si no hay nick, pues muestrar un menu, sino otro

1 respuesta
Nucklear

#4 session_register() está obsoleto, lo que hago es un $SESSION['variable'] = false al iniciar el index y luego al loggear le meto un true, el problema es que al entrar en el index se me pone a false al leer ($SESSION['variable'] = false) y es como si no hiciese nada...

Soltrac

Si es la primera vez q te pones con PHP estás a tiempo de usar un framework.

1 1 respuesta
Nucklear

#6 El rollo es que es una práctica para un trabajo de la UNED por lo que tiene que ser PHP a pelo. Tengo claro que si tengo que hacer algo serio en el futuro usaré algún framework.

Nucklear

¿Nadie sabe como hacerlo?

B

PHP no se puede usar a pelo con plantillas?

Es que esos echos... échale un vistazo a esto: http://www.1stwebdesigner.com/css/how-to-create-php-website-template/ (No me gusta demasiado pero...)

Aunque tampoco me hagas mucho caso, que yo ni idea de PHP.

#12: El header.php no es una plantilla, es un php con echos :s

Además estás repitiendo un montón de código en ese if-else, revísalo ;)

2 respuestas
Mujiwara

El validate.php, creo que sobra el IF que está dentro del 1º IF para hacer el header.

Prueba a cambiar el

!isset($_SESSION['logged'])

por

empty($_SESSION['logged']) || $_SESSION['logged'] == false
2 respuestas
Merkury

Basicamente venia a escribir lo que ha puesto #10 XD.

Nucklear

#9 La plantilla ya la tengo hecha lo que quiero es que con un mismo fichero header.php me muestre una de las dos navbars dependiendo de si está logueado o no.

#10 El if de validate si que sobra, ya lo corregí y en lo otro ya he probado con empty, isset, etc...el tema es que si meto la variable a mano funciona perfectamente xD

2 respuestas
HeXaN

#12 Pues entonces el fallo estará en la consulta de la BD donde compruebes el usuario y contraseña :S

1 respuesta
Nucklear

#13 El formulario valida correctamente, ya lo he probado, el problema es cuando hace el header("location: index.php" ) ; y abre de nuevo el index.php en lugar de leer la variable $_SESSION['logged'] como true entra por el primer if del header y muestra siempre el mismo.

Cuando logueo redirecciona a index.php por lo que por aquí esta pasando:

if($count==1){
        session_start();
        $_SESSION['logged'] = true; //Debería definir la variable
        header("location: index.php"); //Esto funciona
        }
1 respuesta
BLZKZ

#14 prueba a hacer el redirect con redirect($url), a mi el header algunas veces me daba problemas, era como si no le diera tiempo a settear cookies o sessions

Nucklear

Vale, ya lo he arreglado me faltaba agregar session_start() al header.php por lo que no podía leer las variables de sesión.

Tenía entendido que las $_SESSION hacía una llamada implícita a session_start() pero parece ser que no.

Gracias a todos de todas formas :)

1 respuesta
eXtreM3

#16 es lo que te dijo #2 no? xD

1 respuesta
Nucklear

#17 lol, pues si y entonces ayer lo probé...bueno pues es lo que dice #2 ahora si funciona xD

#9 Ya está corregido, lo puse así provisional ahora ya está integrado en un único bloque.

1 respuesta
glolg

#18 igualmente, como te dicen usa frameworks, o si eres como yo que te gusta trabajar, juega con include, ya que la forma adecuada (que a mi me va mejor) sería crear una base que sería el index.php donde yo haría toda la estructura, y sobre esta estructura llamaría a los otro ficheros. De esta forma, solo tendrás que escribir una vez datos como, variables de idioma, en tu caso las sessions, conexiones a bd etc..., mas no sobra decir que el orden puede ser mucho más estricto y la comodidad de modificar código en una posterioridad es bastante más elevada.

HeXaN

MVC que lo llaman, pero si está empezando, dejémosle que aprenda antes xD

Nucklear

A ver el problema es que el trabajo requiere específicamente no usar frameworks.

Viendo que tengo poco código escrito me parece que voy a implementarlo todo de nuevo usando MVC para curarme en salud tanto en orden como en seguridad, ya que tal y como está ahora tiene huecos por todos lados ;b

1 respuesta
HeXaN

#21 Ya nos dirás cómo te queda, a mí personalmente me interesaría verlo en MVC :3

1 respuesta
Nucklear

#22 Por ahora estoy haciendo las clases para las conexiones de la DB. Como tengo una fecha límite de entrega, si me da tiempo lo implemento, si no queda así y via.

Tengo unas cuantas guías sobre MVC y MVC para PHP en concreto, si te interesan avisa.

1 respuesta
HeXaN

#23 Claro, me interesan, sobretodo las enfocadas a PHP :3

#25 Muchas gracias :3

2 respuestas
Nucklear

#24 Pues mañana desde el portátil te las subo.

1 1 respuesta
willy_chaos

A mi tambien me interesa MVC enfocado a PHP.

1 respuesta
Nucklear

#24 #26 Ahi os van:

MVC teoría y practica:
http://warp.povusers.org/programming/mvc.html
http://heim.ifi.uio.no/trygver/themes/mvc/mvc-index.html
MVC vs MVP:
http://www.infragistics.com/community/blogs/todd_snyder/archive/2007/10/17/mvc-or-mvp-pattern-whats-the-difference.aspx
MVC en PHP:
http://oreilly.com/php/archive/mvc-intro.html
http://www.jourmoly.com.ar/introduccion-a-mvc-con-php-primera-parte/
http://tednologia.com/mvc-en-php/
http://www.cristalab.com/tutoriales/implementar-el-patron-modelo-vista-controlador-en-php-c258l/

1 2 respuestas
HeXaN

#27 Muchas gracias, todas a marcadores y a leerlas en estas tardes lluviosas.

1 respuesta
willy_chaos

#27 Muchisimas gracias!

1 respuesta
Nucklear

#28 y #29 he encontrado una guia mucho mejor que lo aclara todo muy bien:

http://books.openlibra.com/pdf/eugeniabahitpooymvcenphp.pdf

1 respuesta