Variables de sesión en php (Login y logout)

B

Buenas, estoy tratando de hacer una pequeña página con un formulario de registro y un sistema de login/logout pero no me aclaro con las variables de sesion, lo que no sé es cómo implementarlo a código. He hecho un pequeño esquema de lo que tengo hecho y funciona, me faltaría solo aplicar las variables de sesión.

A ver si alguien me puede echar una mano.

Un saludo y gracias de antemano.

edbusy

No entiendo muy bien que es lo que te falta exactamente.
Parece estar todo bien.
Usas bbdd no? Entonces la pagina validar (llamarla login te ahorraria pensar) la tienes bien pensada.
Lo que tienes que hacer en esa pagina es guardar lo que quieras por ejemplo el email en la variable de session y en todas las que quieras proteger pues metes un if al principio que si exite la variable (o que si coincide con cualquiera cosa que pongas) que entre y si no que te envie para atras.

Te dejo el pequeño codigo que tendrias que meter en las protegidas que creo que es lo que preguntas.

<?php
session_start();
if(($_SESSION['user'])!='pepe' || ($_SESSION['pass'])!=123){
     header('Location: 2.php');
}     
echo "Identificador de la sesion: ".session_id()."<br>"; echo "Nombre de la sesion: ".session_name(); ?>
1 respuesta
DaRkViRuZ

no entiendo exactamente que quieres que te digamos, como lo tienes planteado parece estar correcto

bLaKnI

La session, es la forma de crear "permanencia" en un entorno asyncrono, basado en requests finitas, como lo es el propio protocolo HTTP.
Pides algo, y se te devuelve. Pides algo "parametrizado" y se te devuelve lo pertinente.
Pero que sucede si en lado servidor, cierta acción genera algo, que requiere ser permanente en el contínuo suceder de las demas peticiones?
Pues para eso existe la sesión. Un entorno especifico para ti, en el que almacenar cualquier variable que este presente en cualquier siguiente ejecución, para que puedas consultara con posteridad.
Loguearse?

  • Formulario con acción a entorno de loguin.
  • Negocio de validación de loguin.
  • En caso funcional, se almacena en la sesión "algo" (lo que tu concretes por desarrollo) que identifica el correcto logueo.
  • Todo el código del aplicativo contempla en su desarrollo, que en sesión exista precisamente este "algo", que identifica al usuario como logueado.

Mediante este sistema, hasta la luna y mas allá.

JukeMushu

El esquema que tienes es bastante bueno sobre lo que va. Simplemente intenta trasladarlo a codigo abstrayendote y sacando las principales caracteristicas.

index.php: Tendrá 2 botones, 1 boton hace un header a login.php y el otro boton a form.php

login.php: Un formulario con 2 campos y 1 boton. Cuando se apriete el boton, la acción sera enviar mediante POST ambos campos a validar.php

spoiler

El campo action del formulario, significa hacia que .php se va a dirigir al darle al boton del formulario. El metodo es POST (mucho mas seguro que GET.

validar.php: Aqui recibiremos nuestras variables mediante POST, simplemente habra que realizar una conexion a la BD.

spoiler

bienvenido.php: Un simple mensaje HTML y un boton que hace un header a logout.php en caso de ser pulsado.

logout.php: Destruir la sesion tal y como lo tienes en el esquema.

form.php: Mismo formulario que en el login, mediante POST envias los datos del formulario a destino.php.

destino.php: Obtienes los datos enviados por POST desde form.php y haces un INSERT en la base de datos.

1 1 respuesta
B

#2 No entiendo a qué te refieres con las protegidas.

Se supone que una vez el usuario ha logueado, me lleva a bienvenido.php, pero, si voy a la página principal (index.php), no me debería de salir iniciar sesion ni registarse porque ya estoy logueado, no? Esos botones tendrían que estar ocultos cuando esté logueado?

#5 Es exactamente como lo tengo, este es mi validar.php

NSFW

EDIT: Sé que se puede mejorar por todos lados, solo quiero hacer un sistema de login lo más básico posible y que funcione. La seguridad ya la miraré más adelante.

1 respuesta
edbusy

#6 Pues que como no las protegas tu sistema de login no sirve de nada ya que puedo entrar por la url

Te dejo un ejemplo de login que utilizo de vez en cuando.

NSFW
1 respuesta
B

#7 Guiándome un poco con tu ejemplo (soy novato en php y hay cosas que no entiendo de tu código) he hecho que mi validar sea así:

Solo he añadido estas líneas en el if respecto al de arriba.

if ($filas>0) {
	session_start();
	$_SESSION['email']=$email;
        $_SESSION['password']=$password;
	header("location: bienvenido.php");
} 

Y en la página de bienvenido.php intento imprimir

Estas logueado como: <?php echo $_POST["email"]; ?>.<br/>

Pero no funciona, ya que no hay ningún vínculo entre el validar.php y el bienvenido.php para que el correo aparezca por pantalla.¿?

1 respuesta
edbusy

#8
Añade session start al incio de la pagina cuando quieras usar sesiones.
El vinculo que dices son precisamente las sesiones y por lo que se usan. Mal explicado porque yo de teoria 0.

Pregunta lo que quieras del ejemplo aunque te advierto que no esta como deberia para estar perfecto.

1
eXtreM3

El session_start() lo tienes que poner en todos los php donde quieras manejar la sesión.
Con la variable $_SESSION accedes a todos los valores que guardes.

Lo tienes ya hecho, sólo te falta eso.

2 1 respuesta
B

#10 Entiendo... me ocurre algo extraño.

Cuando logueo me aparece bienvenido y el nombre de usuario, se supone que si le doy a logout, me destruye la sesion, no? pues si introduzco a mano la URL de bienvenido.php me sigue apareciendo el nombre del usuario anteriormente logueado.

1 respuesta
eXtreM3

#11 hace mil años que no hago esto a mano, pero creo recordar que te falta un session_unset en el logout para cargarte toda la global $_SESSION, échale un ojo.

unset($_SESSION['email']);

etc

1 1 respuesta
B

#12 Vale, acabo de arreglarlo, era una tontería, tenía vinculado el botón de logout a otro php. Ahora sí me desloguea.

Cómo puedo hacer que si estoy logueado, el bóton de login y regístrate no se muestren en el index.php?

1
Camp1

comprobando que no existan las variables de session sabes si estás logueado o no.

1
B

Muchas gracias a todos.

Usuarios habituales