Détection de la destruction de la session

Résolu
Signaler
-
 Utilisateur anonyme -
est il possible, par code, de savoir qu'une session est detruite ? (enfin reagir à un événement "sur sestruuction de session" si on parlait evenementiel ?)

Merci

8 réponses

Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Salut,

PHP n'est pas un langage qui gère des événements, contrairement à Javascript.
Donc non, il n'est pas possible, de base, d'exécuter un script quand une session est détruite (ou lors de tout autre événement).

Ce qu'il est possible, c'est d'utiliser une fonction que l'on appelle pour détruire une session.
par exemple :
function my_session_destroy() {
  if (session_destroy()) {
    // Code a éxecuter
  }
}

Au lieu d'appeler session_destroy() dans ton code, tu appelles cette fonction qui fait ce que tu veux quand cet événement survient.

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...

tout a fait d'accord mais si l'utilisateur ferme le browser par la froix (sur PC) en haut a droite ? Ca marchera ca ?

wai je pense que t'as raison qd meme, je vais laisser tomber mon projet de retranscription dans le monde libre de ce truc alors, ca sert a rien d'ecrire un script fiable qu'à 70%
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
37
Salut,

Bonjour, tu a posté 118 messages, tu devrai savoir dire bonjour, je plaisante  mais il y en a qui te le diron plus méchament je pense !!!
Je ne sais pas mais la meilleur façon de savoir c'est de tester, a tu testé avec un if(session_destroy){ton code}

Si t'a besoin d'aide, MP !!!
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Cette question revient encore et toujours...

Non, ça ne marchera pas, parce que PHP est exécuté côté serveur.
PHP ne fait rien d'autre que traiter des requêtes qu'on lui envoit. Si on ne lui envoit rien, il ne fait rien. C'est un peu le chef cuistot, le serveur web (la machine) le restaurant à emporter : le client passe sa commande au serveur. Si c'est juste de la limonade (HTML, texte brut), il s'en charge tout seul (sort les bouteilles et les porte au client / lit les fichiers et les renvoit au client). Si c'est de la gastro, il demande au cuisinier qui va lui préparer le plat suivant la recette et en tenant compte des préférences du client (PHP va traiter un script avec les paramètres que lui fournit le client). Le serveur donne tout ça au client quand c'est prêt.

Bref.

La seule solution pour vérifier qu'un script est appelé quand la fenêtre du navigateur est fermée, c'est d'utiliser un javascript, qui va réagir à l'événement fermeture (onunload). Ce javascript doit appeler le script PHP que tu veux, qui enregistrera la déconnexion.
Cette solution n'est pas fiable à 100%, parce que javascript peut se désactiver.
Et si un utilisateur laisse la fenêtre ouverte pendant 107 ans, tu croiras qu'il est toujours connecté alors que non.
C'est pas pour rien que sur tous les sites qui affichent la liste des connecté, il est précisé qu'il s'agit des personnes qui ont eu une activité sur le site pendant les X dernières minutes : parce que c'est la seule chose que l'on puisse vraiment vérifier de manière absolument certaine.

Mais bon, une petite recherche sur le forum t'aurait donné la réponse, que j'ai déjà faite il n'y a même pas un mois... Et que d'autres ont certainement déjà faite aussi, et que l'on trouve en abondance sur le net (google est ton ami)

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...

alors sur tout ce que tu dsi, neigedhiver, je suis entierement d'accord. Maintenant je rajoute une petite sauce : j'ai vu fonctionner ce genre de techno en .net et ca marchait (pour ne pas le citer, c'étais sur tchatche.com) et je pensais (d'apres ce que m'ont dit aussi les formateurs .Net) que c'était le serveur qui gérait tout. D'où mon interrogation pour trasposer ce script sur une plateforme libre...
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Ben tu peux rajouter toutes les sauces que tu veux, c'est comme ça que ça se passe en PHP. Si on pouvait faire autrement, ça se saurait.
Avec .Net, le site en question utilise peut-être un ActivX qui lui, peut être en dialogue constant avec le serveur.
Mais si tu me demandes comment on fait en php, tu n'auras pas d'autre réponse que celle que je viens de te donner.
On peut toujours rajouter plein d'objets plus ou moins standards, plus ou moins compatibles, sur une page. On peut embaquer tout un tas de trucs. Flash, ActivX, Applet Java, et j'en passe. Chaque objet fonctionne à sa manière. Chaque objet réagit à son environnement. Quand un objet est reçoit l'information comme quoi il va être détruit, il peut encore faire des trucs avant de se faire hara-kiri : il peut envoyer une requête au serveur, afficher un dernier soubressaut à l'écran...

Mais tous ces objets, en plus de ne pas être forcément standards et compatibles avec tous les navigateurs, peuvent ne pas être chargés du tout. Je te mets au défi de savoir précisément avec tous les moyens que tu veux, quand un utilisateur de Lynx ferme son navigateur : tu ne pourras pas, jamais, c'est impossible, parce que Lynx n'affiche pas d'images, n'exécute pas Javascript et n'interprète pas les css, alors flash, les midi en fond et les applets et autres ActiveX...

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
2480
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Tiens, pour en rajouter une couche...
Je suis persuadé que si tu débranches la connexion réseau de ton ordinateur sur le site dont tu me parles, il ne sait pas que tu t'es déconnecté...
Rien n'est infaillible dans ce domaine... loin de là...

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...