Lección 11: Sesiones
Una sesión, o cookie de sesión
, es un variable que se guarda temporalmente en tu navegador y solo nosotros podremos ver su contenido. Con este mecanismo podremos:
- Proteger páginas para que solo deban entrar los usuarios que estén identificados.
- Guardar una información delicada del visitante y que nadie la pueda ver: nombre, número del documento de identidad, cumpleaños…
- Aumentar la seguridad. En cuanto el usuario “cierra la sesión” (hablaremos más adelante del tema) se eliminará cualquier dato almacenado previamente.
No confundir las session
con las cookie
. Son muy similares y es fácil confundirlas. Las cookie
son unas variables que también se guardan en el navegador del cliente pero si podrá verse su contenido y además su vida será más larga.
Crear una Sesión
Siempre que quieras activar una sesión debes iniciar previamente el sistema con session_start(), solo una vez. Después ya puedes usarlas tantas veces como quieras para todo lo que necesites.
En el ejemplo comprobarás que una sesión es en realidad un array llamada $_SESSION.
session_start();
$_SESSION['nombre'] = 'Goku';
$_SESSION['raza'] = 'Saiyan';
Para leer la variable.
session_start();
echo $_SESSION['nombre'];
// Goku
Comprobar si existe
Una variable de sesión es útil para saber si el usuario puede entrar en una página concreta.
Supongamos que nuestro usuario esta registrado en nuestra base de datos con apodo Bulma
.
// Creamos la variable en algún momento
session_start();
$_SESSION['apodo'] = 'Bulma';
// Comprobamos si existe con isset()
if (isset($_SESSION['apodo'])) {
// Si esta identificado, en otras palabras existe la variable, le saludamos
echo 'Hola ' . $_SESSION['apodo'];
} else {
// En caso contrario redirigimos el visitante a otra página
header('Location: http://dragonball.jp/login.php');
die();
}
Cuando hagas una redirección con header()
siempre termina con un die()
o exit()
. Evitarás problemas de seguridad, puedes leer más al respecto en The Daily WTF.
Borrar
La forma de borrar las sesiones es con la función nativa session_destroy()
.
session_start();
session_destroy();
Si ya sabías previamente PHP y te preguntas donde está unset()
te comento que se encuentra deprecated
y desaconsejado para sesiones.
Modificar
No cambia mucho respecto a un array
.
$_SESSION['apodo'] = 'Picolo';
Ejemplo de un sencillo login con página protegida
Vamos a disponer de 2 páginas: una pública y otra privada.
login.php
es pública. Cualquier persona podrá entrar. El objetivo es la que un usuario se identifique y automáticamente le redireccione a su página de perfil. Los datos correctos para el formulario son:
- Apodo: bulma
- Contraseña: 123
<html>
<body>
<?php
// Comprobamos que nos llega los datos del formulario
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Variables que teóricamente estarían en una base de datos
$apodoBueno = 'bulma';
$contrasenyaBuena = '123';
// Variables del formulario
$apodo = isset($_REQUEST['apodo']) ? $_REQUEST['apodo'] : null;
$contrasenya = isset($_REQUEST['contrasenya']) ? $_REQUEST['contrasenya'] : null;
// Comprobamos si los datos son correctos
if ($apodoBueno == $apodo && $contrasenyaBuena == $contrasenya) {
// Si son correctos, creamos la sesión
session_start();
$_SESSION['apodo'] = $_REQUEST['apodo'];
// Redireccionamos a la página segura
header('Location: perfil.php');
die();
} else {
// Si no son correctos, informamos al usuario
echo '<p style="color: red">El apodo o la contraseña es incorrecta.</p>';
}
}
?>
<form method="post">
<p>
<input type="text" name="apodo" placebolder="Apodo">
</p>
<p>
<input type="password" name="contrasenya" placebolder="Contraseña">
</p>
<p>
<input type="submit" value="Entrar">
</p>
</form>
</body>
</html>
perfil.php
es una página que nadie puede entrar si no pasa por la página anterior.
<?php
// Comprobamos si existe la sesión de apodo
session_start();
if (!isset($_SESSION['apodo'])) {
// En caso contrario devolvemos a la página login.php
header('Location: login.php');
die();
}
?>
<html>
<body>
<!-- Saludamos -->
<h1>Bienvenido <?= $_SESSION['apodo'] ?></h1>
<!-- Botón para cerrar la sesión -->
<a href="logout.php">Cerrar sesión</a>
</body>
</html>
logout.php
: Para complementar se puede crear una página para cerrar la sesión.
<?php
// Iniciamos las sesiones
session_start();
// Destruimos las sesiones
session_destroy();
// Llevamos a login.php
header('Location: login.php');
die();
Con esto tenemos un sencillo sistema de seguridad para nuestras páginas.
Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.
¿Me invitas a un café? ☕
Puedes hacerlo usando el terminal.
ssh customer@andros.dev -p 5555
Comentarios
Nuevo comentario
Nueva replica {{ formatEllipsisAuthor(replyComment.author) }}
Escribe el primer comentario
{{ comments.length }} comentarios