Tancament de sessió
De Wiki personal d'en Guillem Serrat
Tancament de sessió
Quan un usuari tanca sessió, no només hem de tancar la sessió dins del servidor sinó esborrar les possibles galetes desades al navegador sobre la seva sessió.
Inicialització de la sessió i connexió a la BD
Sempre que es treballa amb sessions, el primer que hem de fer és iniciar-la abans d'escriure el codi HTML
session_start();
A més, hem de requerir el fitxer amb les funcions i una connexió a la BD. En aquest cas, al tancar sessió afegim una acció nomenada "logout" a la taula activitat de la BD, i per tant necessitem la connexió d'escriptura.
require 'funcions.php'; require './connexioBD/connexioRW.php';
Comprobar que l'usuari està autenticat
Si l'usuari està autenticat, registrarem una acció anomenada "logout", en cas contrari redirigirem l'usuari a la pàgina d'inici de sessió
if (isset($_SESSION['usuari'])) { // Si l'usuari està autenticat
// Registrem l'acció logout
registrar_activitat($pdo, $_SESSION['usuari']['id'], 'logout');
} else {
// Si l'usuari no està autenticat directament redirigim a l'inici de sessió
header('Location: login.php');
exit;
}
Tancar sessió i esborrar cookies
Al haber registrat l'acció a la BD esborrarem la sessió i les cookies, per finalment redirigir l'usuari a la pàgina inicial
// Netejar sessions i cookies
$_SESSION = [];
session_destroy();
setcookie('recordar_id', '', time() - 3600, '/');
setcookie('recordar_token', '', time() - 3600, '/');
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-3600, '/');
}
// Redirigim l'usuari a index.php
header('Location: index.php');
exit;
Codi complet
<?php
session_start();
require 'funcions.php';
require './connexioBD/connexioRW.php';
if (isset($_SESSION['usuari'])) { // Si l'usuari està autenticat
// Registrem l'acció logout
registrar_activitat($pdo, $_SESSION['usuari']['id'], 'logout');
} else {
// Si l'usuari no està autenticat directament redirigim a l'inici de sessió
header('Location: login.php');
exit;
}
// Netejar sessions i cookies
$_SESSION = [];
session_destroy();
setcookie('recordar_id', '', time() - 3600, '/');
setcookie('recordar_token', '', time() - 3600, '/');
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-3600, '/');
}
// Redirigim l'usuari a index.php
header('Location: index.php');
exit;