IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Optimisation traçabilité de fin de session


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    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 ;-) )
    <?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);
    }

    ?>

  2. #2
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    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...
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  3. #3
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    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?

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    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.

  6. #6
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    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é?

  7. #7
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    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é...
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  8. #8
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    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).

  9. #9
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    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
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  10. #10
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par défaut
    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

  11. #11
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    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...

  12. #12
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    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?

  13. #13
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    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

  14. #14
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Par défaut
    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

  15. #15
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    C'est pas con...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fin de session
    Par pod1978 dans le forum Langage
    Réponses: 5
    Dernier message: 01/04/2006, 14h36
  2. [websphere] Version du JSDK et fin de session.
    Par ncachet dans le forum Websphere
    Réponses: 2
    Dernier message: 04/01/2006, 00h04
  3. message d'erreur perso lors fin de session
    Par zorba49 dans le forum ASP
    Réponses: 1
    Dernier message: 26/08/2005, 11h12
  4. detruire une cookie après fin de session
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 25/08/2005, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo