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 21/06/2006, 09h44   #1
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Par défaut Optimisation traçabilité de fin de session

Bonjour,
Pour expliciter un peu le titre de ce poste voici mon problème à l'origine: je voulais (comme pas mal de monde) déterminer le temps de connexion de chaque utilisateur sur mon site web. Pour cela j'utilise les sessions php. A chaque création de session j'enregistre la date (et l'heure), le nom, l'IP et l'id de session de l'utilisateur, dans une table de ma base de données.
Jusqu'ici tout va bien...
Le problème c'est pour déterminer la date et l'heure de la déconnexion.

J'ai un bouton 'déconnexion' mais comme la plupart des utilisateurs en général ferme le navigateur sans cliquer sur ce bouton, je ne peux pas l'utiliser de manière fiable pour déterminer la date de fin de session.
J'ai donc créée un script php avec une boucle infini (while (1)) qui recherche dans la table de la base tout les enregistrements qui n'ont pas de date de fin et qui compare l'id de session avec les noms des fichiers de session.
Ceci fonctionne bien, mais je ne sais pas trop pour le moment quel est l'impacte en terme de fonctionnement sur serveur web et sur le serveur de base de données.

Est-ce que le fait d'avoir un petit script qui tourne en permanence peut avoir un gros impacte sur le serveur en terme de temps d'accès ou autre?
Je mets ci-dessous le code de ce script afin que vous puissiez me dire s'il y a moyen d'optimiser ce script ou bien s'il y a un autre moyen pour détecter l'heure de fin de session?

Merci.

Voici le script: (pour info config/connexion.php contient la connexion à la base de données... comme on peut s'en douter ;-) )
Citation:
<?php
include("config/connexion.php");
set_time_limit(0);

while(1)
{
//Recherche des sessions sans date de fin
$sql_s = "SELECT * FROM sessions WHERE fin = ''";
$query_s=mysql_query($sql_s) or die ("Impossible d'exécuter la requête : ".$sql_s);
$num_s=mysql_num_rows($query_s);
$fin = @mktime(date('d-m-Y H-i-s'));

for($i=0;$i<$num_s;$i++){
$id = mysql_result($query_s,$i,'id');
$session_id = mysql_result($query_s,$i,'session_id');
$debut = mysql_result($query_s,$i,'debut');
$duree = $fin - $debut;

$filename = '../../repertoire/session/'.$session_id.'';

if (!file_exists($filename)) {
$sql_updt_s = "UPDATE sessions SET fin = '".$fin."', duree = '".$duree."' WHERE id = ".$id."";
$query_updt_s=mysql_query($sql_updt_s) or die ("Impossible d'exécuter la requête : ".$sql_updt_s);
}
}
sleep(10);
}

?>
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 09h55   #2
Rédacteur
 
Avatar de MasterOfChakhaL
 
Homme
Développeur Web
Inscription : juin 2004
Messages : 2 148
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Conseil

Informations forums :
Inscription : juin 2004
Messages : 2 148
Points : 2 628
Points : 2 628
de toutes facons, ton script sera arreté au bout d'un temps limite défini par php.ini
cette limite peut être enlevée si tu as accès à la config de php.

et puis une boucle infini, c'est pas génial pour les performances en général...
tu utilises un sleep donc, pourquoi pas...

sur mon site, je me contentais de faire ceci:
chaque fois qu'une page est chargée, je lance de manière aléatoire (une petite proba) la fonction de nettoyage des sessions

Pas franchement une solution, mais bon, un avis c'est déjà ca...
MasterOfChakhaL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 09h58   #3
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Citation:
Envoyé par MasterOfChakhaL
de toutes facons, ton script sera arreté au bout d'un temps limite défini par php.ini
La limite est enlevée en début de script par set_time_limit(0);
A moins qu'il y ait une autre variable dans php.ini qui passe outre cette fonction?
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h06   #4
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
Code :
1
2
 La limite est enlevée en début de script par set_time_limit(0);
A moins qu'il y ait une autre variable dans php.ini qui passe outre cette fonction?
c'est surtout qu'un hebergeur ne te permettra pas ça.

Meme avis que MasterOfChakhaL
A chaque connexion (voire chaque page), un petit nettoyage des sessions (moi je fais pas d'aléatoire, je me contente d'un LIMIT dans la requete (5 à 10)
__________________
Articles sur developpez.com
- Gestion des exceptions avec PHP5
- Chiffrement et hash en PHP contre l'attaque Man in the middle
- Aedituus - Espace membre sécurisé en PHP5

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h20   #5
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Citation:
Envoyé par wamania
c'est surtout qu'un hebergeur ne te permettra pas ça.
Ce n'est pas un problème étant donnée que le site web est dans un intranet et hébergé sur mon serveur. J'ai donc un accès total au serveur.
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h28   #6
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Citation:
Envoyé par wamania
A chaque connexion (voire chaque page), un petit nettoyage des sessions...
Exemple avec cette solution:
Soit 2 visiteurs V1 et V2 qui se connectent sur le site respectivement à 14h00 et à 15h00 et qui reste sur le site 2 minutes.

Alors, le temps de connexion de V1 sera de 15h00 - 14h00 soit une durée de 1h, alors qu'il n'est resté en réalité que 2 minutes.

C'est bien ça? ou il y a un truc qui m'a échappé?
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h38   #7
Rédacteur
 
Avatar de MasterOfChakhaL
 
Homme
Développeur Web
Inscription : juin 2004
Messages : 2 148
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Conseil

Informations forums :
Inscription : juin 2004
Messages : 2 148
Points : 2 628
Points : 2 628
je crois bien que c'est ca...

plus il y aura de visiteurs, plus la technique est précise pour mesurer le temps de connexion.

quoiqu'il arrive le temps sera toujours surestimé...
MasterOfChakhaL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h44   #8
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Le problème de cette solution pour mon cas c'est que le site va avoir quelques temps de forte affluence et de grandes périodes d'inactivité (qq semaines voire un mois ou deux). C'est donc pas très satisfaisant pour ce site(même si je suis conscient qu'il n'y a pas de solution spécifique).
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h47   #9
Rédacteur
 
Avatar de MasterOfChakhaL
 
Homme
Développeur Web
Inscription : juin 2004
Messages : 2 148
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Conseil

Informations forums :
Inscription : juin 2004
Messages : 2 148
Points : 2 628
Points : 2 628
puisque tu as accès à ton serveur, pourquoi n'essaierais tu pas de lancer des scripts de nettoyage depuis la cron table?
ca t'éviterais d'avoir une boucle infini, cron s'en occupera
MasterOfChakhaL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h48   #10
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
pas du tout
tu enregistre à chaque page la date de dernier acces.
si tu connais la date d'arrivé du visiteur, tu fait la différence et t'as le temps de connexion, meme si il est calculer 1h après
__________________
Articles sur developpez.com
- Gestion des exceptions avec PHP5
- Chiffrement et hash en PHP contre l'attaque Man in the middle
- Aedituus - Espace membre sécurisé en PHP5

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h51   #11
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Citation:
Envoyé par MasterOfChakhaL
puisque tu as accès à ton serveur, pourquoi n'essaierais tu pas de lancer des scripts de nettoyage depuis la cron table?
ca t'éviterais d'avoir une boucle infini, cron s'en occupera
mon serveur est sous windows...
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h54   #12
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Citation:
Envoyé par wamania
pas du tout
tu enregistre à chaque page la date de dernier acces.
si tu connais la date d'arrivé du visiteur, tu fait la différence et t'as le temps de connexion, meme si il est calculer 1h après
J'ai pas tout compris...Comment tu détermines la date de dernier acces?
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 12h00   #13
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Ca veux dire qu'il faut tracer toutes les pages du site...Il va falloir que je supprime des pages si je veux pas y passer 3 jours
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 12h06   #14
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
tu n'as pas un fichier inclus commun à toutes les pages?
style un header.php, voir meme la connexion à la BDD, si c'est le cas, fais ce traitement la dedans.
__________________
Articles sur developpez.com
- Gestion des exceptions avec PHP5
- Chiffrement et hash en PHP contre l'attaque Man in the middle
- Aedituus - Espace membre sécurisé en PHP5

Lithium : ORM ActiveRecord PHP5 extrêmement léger
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 12h10   #15
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
C'est pas con...
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h15.


 
 
 
 
Partenaires

Hébergement Web