Par défaut, la durée de vie d'une session est de 20 minutes. C'est-à-dire que chaque fois que l'utilisateur fait une action, la session est réactivée pour 20 minutes. C'est comme cela que tu peux vérifier que les utilisateurs ont quitté ton site sans se déconnecter (au bout de 20 minutes seulement).
Voila comment je gère le problème pour un Intranet :
- Après vérification réussie du code et du mot de passe de l'écran de login, je stocke l'identifiant de session dans une variable de session.
$_SESSION["SESSION_ID"] = session_id();
- Sur le bouton de déconnexion (ça arrive parfois, des utilisateurs qui se déconnectent), je remet cet identifiant de session à null et je réafffiche la page de login avec un message du type "déconnexion effectuée".
- Sur toutes les pages du site, dans le code HTML, je fais un refresh de la page vers la page de login avec un message "session fermée" au bout d'une demi-heure.
Code : Tout sélectionner
<meta http-equiv="Refresh" content="1800;url=index.php?action=timeout">
Tout comme le cas où l'utilisateur se déconnecte, l'action timeout remet l'identifiant de session à Null et réaffiche la page de login (seul le message d'information est différent).
Mais il y a également le cas où, par exemple, l'utilisateur a ouvert une boîte pour uploader un fichier. Dans ce cas le refresh ne fonctionne pas. Plus d'autres cas où, sans raison, le refresh ne se déclenche pas. Donc, dans toutes les pages du site, avant de faire quoique ce soit, je vérifie si l'identifiant de session stocké est bien égal à l'identifiant de session actif et sinon, encore une fois, je redirige vers le time-out si la session a expiré.
if ($_SESSION["SESSION_ID"] != session_id()) {
header ("Location: index.php?action=timeout"); exit();
}
Si tu veux savoir qui est connecté ou pas, il te reste à coupler l'enregistrement de la variable de session ou sa mise à null avec des enregistrements dans une base de données.