La fin d'une session ne peut pas être automatiquement déterminée par le système.

Le développeur peut arrêter implicitement une session avec la fonction session_destroy().

Les variables de session dans le tableau $_SESSION restent accessibles dans le script qui a invoqué session_destroy(), mais elles ont disparu dans les scripts suivants.

Les données session (SID, nom de la session) ne sont pas supprimées. Un nouveau session_start() ne générera pas un nouvel identifiant de session, mais reprendre le premier.

Pour terminer complétement une session, il faut supprimer implicitement le cookie de session avec setcookie().

Exemple : terminer une session

Comme pour supprimer un cookie, il faut utiliser les mêmes paramètres que ceux de sa création, nous les récupèrons avec la fonction session_get_cookie_params() spécialement faite pour ça. A noter la date de validité du cookie est le moment présent - 24 heures pour éviter tout problème de décalage horaire entre le serveur et le client.

On aurait pu aussi implicitement réinitialiser $_SESSION avec
$_SESSION = array();
si on n'avait plus besoin de son contenu dans le script.