Tancament de sessió

De Wiki personal d'en Guillem Serrat
La revisió el 22:00, 10 gen 2026 per Guseba (discussió | contribucions) (Es crea la pàgina amb «== 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...».)
(dif.) ← Versió més antiga | Versió actual (dif.) | Versió més nova → (dif.)

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;