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

PHP & Base de données Discussion :

requete avant fermeture


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 131
    Points : 95
    Points
    95
    Par défaut requete avant fermeture
    Bonjour,

    Je développe un petit soutil PHP/MySQL en intranet.
    Lors de la connexion d'une personne je récupère la darte et l'heure de connexion que je stocke dans une table.
    Si l'utilisateur click sur déconnection j'update la ligne et je met l'heure de deconnexion a jour.

    Le problème est le suivant :
    Si l'utilisateur ferme la fenetre avec la croix ou ALT F4 ben je suis mal...

    Y a t il une solution en php ou javascript qui me permette de réaliser une requete SQL juste avant la fermeture de mon outil.

    Merci

    Ldc

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    il n'y a pas de solution qui marche a tout les coups...

    c'est pourquoi la plupart des "live counter" fonctionnent avec un timeout :

    lorsqu'une page est raffraichie, on "supprime" (ou dans ton cas, on met a jour la date de déconnection) toutes les entrées de la table qui ont une heure de derniere activité inferieure a un certain timeout (qui correspond alors a une durée d'inactivité)

    On met ensuite a jour la date de derniere activité a jour avec la date courante.

    Si cette solution ne te plait pas, tu peux regarder en javascript : <body onunload='...'> ou un truc comme ca, mais je crois que ca marche pas si on ferme la fenetre, uniquement si on va sur un autre site.


    Sinon, tu peut aussi "eduquer" tes utilisateurs... dans la mesure ou c'est un intranet, ils sont peut etre censés savoir qu'ils doivent cliquer sur "Deconnection". Tu peux donc, par des rappels par mail, voir des denonciations publiques (mailing list avec la liste des personnes qui ont oubliées de se deconnecter : "bouh c'est pas bien ;o) eduquer plus ou moins tes utilisateurs ;o))

  3. #3
    Membre émérite
    Avatar de yiannis
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 494
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 494
    Points : 2 791
    Points
    2 791
    Par défaut
    Bonjour,

    Ahhh, l'eternelle question que l'on se pose tous a un moment

    ben....il n'y a pas de solutions a ma connaissance. Comment voudrais tu lancer un job une fois que l'utilisateur a ferme sa fenetre ? Un cron job qui tournerait toutes les minutes verifiant les session (si tu as des sessions) ? Verifier les sessions qui sont inactives depuis n minutes?

    Non desole moi je n'en voit pas, mais peut etre d'autres en ont une

  4. #4
    Membre confirmé Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Points : 483
    Points
    483
    Par défaut
    Hello

    je pense qu'il faudrait utiliser les sessions et que la personne connectée et voir si tu peux utiliser session_set_save_handler() :
    http://cyberzoide.developpez.com/php4/faqsession/

    EKA+

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 131
    Points : 95
    Points
    95
    Par défaut
    Le problème avec le timeout, c'est que j'ai peur de surcharger la bdd pour rien .....
    Y a t il un réel risque avec une centaine d'utilisateur .....
    Merci

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    tu peux capter l'évènement de fermeture de page avec onUnload. Par contre ca t'oblige à utiliser une frame cachée (pour éviter que cet évènement se lance aussi à la réactualisation de la page) sur laquelle tu placera cet évènement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onUnload="fonction_js()">
    Ensuite à la fermeture tu lance à l 'aide de ta fonction JS une fenêtre invisible par exemple pour la déconnexion et finaliser ce que tu as à faire.
    enfin c'est ce qu'on a fait et ça marche.


    Ediy: j'avais mis onBeforeUnload...mais ca affiche un message en + ! donc dans ton cas mieux vaut onUnload.

  7. #7
    Membre confirmé Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Points : 483
    Points
    483
    Par défaut
    Le problème du unLoad... c'est que si il y a une panne de courant... l'enregistrement ne se fera pas non ?
    EKA+

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par ekameleon
    Le problème du unLoad... c'est que si il y a une panne de courant... l'enregistrement ne se fera pas non ?
    EKA+

    j'ai pas tout saisi?

  9. #9
    Membre confirmé Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Points : 483
    Points
    483
    Par défaut
    Le but ici est d'enregistrer les heures de déconnection quoi qu'il arrive... si l'utilisateur à un problème de machine ou autre... faut que les notifications se fassent côté serveur non ?

    et il ne faut pas compter sur du javascript côté client ? ou alors j'ai raté un truc ?

    EKA+

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par ekameleon
    Le but ici est d'enregistrer les heures de déconnection quoi qu'il arrive... si l'utilisateur à un problème de machine ou autre... faut que les notifications se fassent côté serveur non ?

    et il ne faut pas compter sur du javascript côté client ? ou alors j'ai raté un truc ?

    EKA+
    Ok je vois ce que tu veux dire mais à la base elle voulait faire ça côté client et puis côté serveur mis à part de tester si un utilisateur est encore actif avec les sessions je ne vois pas trop quoi faire plus

  11. #11
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 131
    Points : 95
    Points
    95
    Par défaut
    et pour le timeout sa risque de saturer ma base ou non avec une centaine d'utilisateur ...?

    Merci

  12. #12
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    la solution du timeout implique, a chaque rechargement de page, d'executer au minimum 2 requetes :

    * Suppression des sessions en timeout
    * Update de la session courante

    Tu est obligé de faire un update de la session courante... je ne vois pas comment tu pourrais t'en passer... mais par contre, tu n'est pas obligé de faire une suppression des sessions en timeout tout le temps (sous reserve d'erreurs d'affichage evidemment)

    Tu peux ne l'executer qu'une fois sur 3 avec un mt_rand(0,100) < 33 par exemple, ou encore ne lancer que toutes les heures (acces a un fichier contenant l'heure de derniere mise a jour pour pas acceder a la base)
    ou encore utiliser webcron.org si tu ne veux l'executer que tout les jours par exemple.
    Tout depend de tes besoins... si tu met ton timeout a 2mn et que tu veux une grande precision, alors oui, avec 100 utilisateurs simultanés (pas 100 utilisateurs par jour) ca sera peut etre trop. mais dans tout les cas "raisonnables" tu devrait pouvoir le parametrer pour que ca passe.

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/05/2007, 18h58
  2. Valider avant fermeture
    Par GPZ{^_^} dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/02/2007, 19h38
  3. Message confirmation avant fermeture popup
    Par Ant8386 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/07/2006, 12h11
  4. Réponses: 3
    Dernier message: 02/05/2006, 15h01
  5. Temps de réalisation d'une requete avant lancement
    Par jcachico dans le forum Outils
    Réponses: 6
    Dernier message: 12/04/2006, 16h27

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