Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/08/2011, 14h58   #1
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
Par défaut Savoir si une session est encore active

Bonjour, dans un script, je génère des sessions qui sont numérotées.
J'enregistre les sessions avec :
Code :
1
2
3
 
session_start();
session_register($clesession);
Chaque clé de session est enregistrée dans une BDD.

Ma question, comment faire pour savoir si une session est encore active?
J'ai essayé
Code :
if (!session_is_registered($record['numsession']))
Mais ce code ne fonctionne pas comme je le voudrais.
Moi je voudrais tester toutes les sessions coté serveur et savoir si un utilisateur est encore connecté à cette session.

Peut être en lisant dans le dossier sessions???

Merci de votre aide.
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 15h05   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Il faudrait définir ce qu'est une session active

PS : session_register( ) est déprécié depuis pas mal de temps et obsolète depuis PHP 5.3
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 15h11   #3
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
En faite, sur un site je propose de tester un plugin pour tinymce. Ce plugin permet d'uploader des images sur le serveur.

Au chargement de la page, je créer une clé je créer un dossier temporaire avec le numéro de clé dans ce dossier temporaire j'ajoute 3 photos histoire de remplir un peut.

Ensuite, j'ajoute la clé dans une BDD, et je voudrais démarrer une session portant se numéro de clé.

Lorsqu'un autre utilisateur vas sur le site, mon script récupère toutes les clés enregistrées dans la base. Ces clés correspondent donc aux différentes session créées par les utilisateurs.

Ensuite, je veux analyser chaque clé pour savoir si un utilisateur est encore connecté dessus.

Si personne n'est connecté, je supprime automatiquement l'enregistrement dans la base puis le dossier temporaire...
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 15h32   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
je veux analyser chaque clé pour savoir si un utilisateur est encore connecté dessus.
Re, merci pour les précisions
Comment définis-tu un utilisateur connecté ou non-connecté ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 11h25   #5
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
Merci a toi de Prendre du temps pour repondre!

En faite il n'y a pas de Login pour gerer les utilisateurs...
Je veux juste que quand quelqu'un arrive sur la page d'essais du plugin, un dossier temporaire soit créé.

Au depart, je n'avais pas pensé a ca et du coup tout le monde bricolaient dans le meme dossier temporaire... Si un utilisateur ajoutait une photo pour faire des test, les autres pouvaient tout voir! Le dossier temporaire commun a tous était vidé a chaque ouverture de la page...

Or je souhaite que si plusieurs utilisateurs se connectent sur la page de test, il y ai un dossier temporaire pour chaque personne.
J'arrive a le faire en générant une clé, mais mon soucis c'est de supprimer automatiquement les dossiers temporaire apres qu'un utilisateur quite la page ou ferme le navigateur...

Merci de ton aide.
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 12h47   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
Envoyé par jojo86 Voir le message
mais mon soucis c'est de supprimer automatiquement les dossiers temporaire apres qu'un utilisateur quite la page
Suffit de tester si l'utilisateur se trouve sur la page de test des plugins ou pas.
Si non suppression du dossier temporaire.
Tu peux ajouter un flag pour ne pas relancer la procédure inutilement à chaque hit.

Citation:
ou ferme le navigateur...
Plus difficile, lancer une purge de temps en temps... Pour la faire automatiquement :

Code :
1
2
3
if ( mt_rand(1, 100) === 1 ) { // Tous les ~100 chargements
    purger( ) ;
}
Puisqu'il semble que tu aies accès au dossier des sessions :
- Supprimer les dossiers temporaires dont on ne retrouve pas le nom parmi les fichiers de session
- Supprimer les dossiers temporaires dont le fichier de session est trop vieux
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 10h40   #7
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
Citation:
Envoyé par Séb. Voir le message
Suffit de tester si l'utilisateur se trouve sur la page de test des plugins ou pas.
Si non suppression du dossier temporaire.
Cette piste me convient, mais comment faire pour savoir si l'utilisateur est connecté sur la page ou non?

Sinon j'avais fait une bidouille pour supprimer les sessions créées il y a plus de trois heures. J'avais ajouté un champ dans ma table format DATETIME a la création du dossier temporaire j'ajoutais NOW dans ma table...
Ensuite, a chaque chargement de page je viens analyser chaque enregistrement et si le DATETIME >3h alors on supprime...

Mais ta solution que j'ai mis en QUOTE me conviendrais mieux...

Merci!
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 18h12   #8
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
Envoyé par jojo86 Voir le message
comment faire pour savoir si l'utilisateur est connecté sur la page ou non?
A mettre sur chaque page :

Code :
1
2
3
if ( ! est_sur_page_plugins( ) ) {
    purger( ) ;
}
Pour déterminer la page en cours regarde dans le tableau $_SERVER, notamment PHP_SELF et SCRIPT_NAME
http://php.net/manual/fr/reserved.variables.server.php
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 19h48   #9
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
Ok je comprends, mais si un user est sur la page et qu'il ferme le navigateur???
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h01   #10
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Tu ne pourras pas détecter de manière fiable la fermeture du navigateur.
Donc il faut laisser mourir la session comme tu le fais déjà...
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 23h45   #11
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
Je vais faire un mix de mon idée de depart et de la tienne!

Je limite la session a 3 heures avec un decompte visuel pour l'utilisateur. Au bout de 3heures je reload la page si le user est encore dessus.
Sinon, lorsqu'un autre utilisateur se connecte a la page, je verifie les enregistrements de la base et je supprime tout ce qui est supérieur a 3h.

En plus, sur chaque page je ferais peut etre un appel a la fonction de purge... Quoi que c'est peut etre pas necessaire...
A moins que je mette en place une table nomée LastPurge... A chaque purge je met a jour cette table, et si la derniere purge remonte a moins de 3heures alors on n'execute pas le script...
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h37.


 
 
 
 
Partenaires

Hébergement Web