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 :

Améliorer mon code de compteur de temps de connexion


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut Améliorer mon code de compteur de temps de connexion
    Bonjour a tous,,

    J'ai écris un code qui permet de stocker dans ma BDD le temps de connexion, entre la connexion a une page par un membre (espace identification) et la deconnexion, via session_destroy();

    Mais, j'ai plusieurs soucis :

    - comment afficher régulièrement le temps de connexion instantané, sachant que le temps de connexion réel ne s'affiche uniquement qu'une fois que la personne se reconnecte la prochaine fois.
    - comment pouvoir déclencher session_destroy(); meme si le membre visite une autre page ou clique sur la croix qui ferme l'onglet d'un navigateur ?

    Merci pour votre aide, voici mon code :

    La personne se connecte avec ses bons identifiants et cela déclenche le code php suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $req = mysql_query("SELECT * FROM `table_membre ` where ......... ");
    $data = mysql_fetch_assoc($req);
    $MB_idMEMBRE=$data['idMEMBRE'];
     
    //......
    //......
     
    $modif=mysql_query("UPDATE table_membre SET a_dateconx='".strtotime(date("Y-m-d H:i:s"))."' where idMEMBRE='$MB_idMEMBRE'");
     
    $MB_dateconx=$data['a_dateconx'];
     
    $date_compare = strtotime(date("Y-m-d"));
    $date_con = strtotime(date("Y-m-d H:i:s"));
    $res = mysql_query("SELECT * FROM `table_journal ` where idMEMBRE='$MB_idMEMBRE' and date='$date_compare' and connexion<>'' and deconnexion=''");
    $nbres=mysql_num_rows($res);
    if ($nbres=="0"){$modif=mysql_query("INSERT INTO table_journal (idMEMBRE, date, connexion,ip) VALUES ('$MB_idMEMBRE', '$date_compare', '$date_con', '$ip')");}
    // redirection vers la page de formation
    une fois sur la page de formation, et après le temps qu'elle souhaitera elle se déconnecte en cliquant sur un lien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    accueil.php?action=logout&utlog='.$MB_idMEMBRE.'&natform='.$niv.'
    et cela déclenche ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?php
    header('Content-Type: text/html; charset=UTF-8');
     
    if (($_GET['action'] == 'logout'))
    {
    	$utlog=$_GET['utlog'];
    	$natform=$_GET['natform'];
    	$date_deconx = strtotime(date("Y-m-d H:i:s"));
     
    	$res = mysql_query("SELECT * FROM `table_journal ` where idMEMBRE='$utlog' order by idJ desc limit 1");
    	while($cl = mysql_fetch_array($res, MYSQL_ASSOC))
    	{
     
    		$conex=$cl['connexion']; 
    		$solde_temps = $date_deconx - $conex;
     
    		$idj=$cl['idJ'];
    		$modif=mysql_query("UPDATE table_journal SET `deconnexion` = '$date_deconx',`solde_temps`='$solde_temps' where idJ='$idj'");
     
    		$result_sum= mysql_query("SELECT SUM(solde_temps) AS cout FROM `table_journal ` where idMEMBRE='$utlog' and natform='$natform'");
    		$solde_temps = mysql_result($result_sum,0);
     
    		$modif=mysql_query("UPDATE table_res SET `MBsoldetemps`='$solde_temps' where idMEMBRE='$utlog' and natform='$natform'");
    	}
     
    	$_SESSION = array();
    	session_destroy();
    	header('Location: '.$base_site_err); // retour vers page d'identification
    }

    Mais il n'est au courant du temps passé que si il se reconnecte puis se reconnecte, donc c'est un problème pou celui qui a besoin de connaitre en temps réel son temps de connexion.
    Enfin, il faudrait que je puisse suspendre son temps de connexion si il change de page, voir déclencher un autre temps si il visite une page qui réclame aussi d'enregistrer son temps de connexion a la nouvelle page.

    Pour information, je suis en train de créer un site de formation en e-learning multi formations, pour situer un peu ma demande concernant son fonctionnement.

    Merci pour toute l'aide apportée.

    Guillaume

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    pourquoi n'utilises-tu pas une variable en session du style $_SESSION['login_microtime'] ou $_SESSION['page_abc']['login_microtime']comme ça à chaque page demandée tu peux faire la différence entre l'horodatage de la demande et l'horodatage en session pour avoir la durée de connexion.
    Au moment de la déconnexion, tu stockes en base la durée totale de la connexion et tu lui renvoies la valeur sur sa page de confirmation de déconnexion.

    Au passage, les fonctions mysql_XXX ont été abandonnées par PHP, tu devrais mettre à jour ton code avec PDO

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonjour rawsrc et merci pour cette première idée.

    Je vais tester cette gestion des sessions.

    Concernant mysql_xxx et PDO. Ce dernier me parait tellement compliqué que tant qu'OVH accepte php 5.6, je vais continuer avec mysql_... je prendrai un pro du php 7.2 par la suite pour me changer tous mes scripts, car je ne sais pas mais dés que je tente de comprendre PDO je suis complètement largué au bout de quelques minutes, sans que je sache pourquoi.

    Je reste en attente de toute idée supplémentaire pour mes scripts concernant ma question.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bponjour,

    alors essaie mysqli_ !
    C'est justement étudié pour ceux qui ont déjà mysql_, et sont "allergiques" à PDO...

    Cela dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$utlog=$_GET['utlog'];
    ...
    	$res = mysql_query("SELECT * FROM `table_journal ` where idMEMBRE='$utlog' order by idJ desc limit 1");
    AUCUNE PROTECTION contre les injections SQL !!

    AU MINIMUM, il faut utiliser mysql_real_escape_string() !!


    N.B. j'espère que ce n'est pas un site de formation à la programmation informatique... si ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonjour jreaux62 et merci pour ta réponse.

    Je vais passer à mysqli_ dés que j'ai le temps de me pencher sur toutes les requêtes qui sont accessibles sur mysql_ et plus sous myslqli_

    Ensuite concernant les risques d'injections SQL, à ce niveau la d’accès du site ce n'est plus utile, car d'une le CRM de formation n'est pas public, et de deux il y a déjà eu en amont un espace d'identification protégé (md5), donc il n'y a aucune raison que nos stagiaires, sans aucun rapport avec des formations informatiques mais en Crédits et Assurances, décident d'attaquer le CRM à ce moment la.

    Mais merci de ton aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    md5, tu dis ?

    Avertissement

    Il n'est pas recommandé d'utiliser cette fonction pour sécuriser les mots de passe, en raison de la nature rapide de cet algorithme de hachage.
    Voir F.A.Q du hachage des mots de passe pour plus de détails et les bonnes pratiques.
    [...]
    ...vous êtes vivement encouragé à utiliser l'API native de hashage de mots de passe lorsque vous le pouvez.

    Tu connais la "Loi de Murphy" ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    OULAAAAAA

    Je suis carrément et gravement obsolète la !!!!

Discussions similaires

  1. [Débutant] idée pour améliorer mon code ?
    Par Imène_23 dans le forum MATLAB
    Réponses: 7
    Dernier message: 27/08/2011, 23h54
  2. améliorer mon code avec une boucle
    Par hotdogFRANCE dans le forum C#
    Réponses: 4
    Dernier message: 29/01/2011, 17h35
  3. Votre avis pour améliorer mon code (opérations matricielles)
    Par Schopenhauer dans le forum Débuter
    Réponses: 42
    Dernier message: 17/09/2010, 19h25
  4. [WD15] Comment améliorer mon code LanceAppli
    Par papydev dans le forum WinDev
    Réponses: 13
    Dernier message: 20/08/2010, 12h17
  5. [Sécurité] Comment amélioré mon code ?
    Par Nadd dans le forum Langage
    Réponses: 14
    Dernier message: 03/03/2006, 20h13

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