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 :

Qui est en ligne [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Him
    Him est déconnecté
    Membre éclairé Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Par défaut Qui est en ligne
    Bonjour,

    je cherche à faire un système de 'qui est en ligne' pour mettre sur mon portail.
    Pour ce faire, j'ai imaginer que :

    'le membre se connecte au site', je met à jour un champ 'last_logon' avec l'heure ou le timestamp actuel', et sur la home du site, j'affiche tous ceux qui se sont connecté pour la dernière fois il y'à x minutes, ou tout simplement les derniers connectés.


    Ce que je voudrais savoir, c'est comment être le plus réaliste possible ?
    -> Un membre qui se connecte peux passer 2 heures sur le site sans repasser par la page de login...

    Alors je me dis, "chaque fois qu'il passera sur l'index en temps qu'identifié, met à jour ce last_logged...

    -> Question : cela ne seras t'il pas trop lourd en ressource, si le mec passe systématiquement par la home ?

    les requêtes sql c'est cool, mais les roquettes j'aime pas trop

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Par défaut
    J'ai réalisé également un système similaire sauf que je décide de tracker tout le monde (anonyme ou loggé) et sur toutes les pages, en considérant les informations enregistrées (timestamp+ip ou login) comme perimée au delà d'une minute.
    Bon je reconnais que c'est pas très optimisé puisque ça fait un sacré paquet de requètes pour chaque appel.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <?php
     
    //Adresse IP du visiteur
    $ip = $_SERVER['REMOTE_ADDR'];
     
    //Timestamp actuel
    $timestamp = time();
     
    //Pseudo de la session
    $pseudo = $_SESSION['login'];
     
    //60 sec max
    $visite = 60;
     
    $timestamp_debut_visite=$timestamp-$visite;
     
    //Si loggé
    if ($pseudo){
    	mysql_query("INSERT INTO online VALUES ('".$timestamp."' , '".$ip."' , '".$pseudo."') ");
    	mysql_query("DELETE FROM online WHERE (pseudo='".$pseudo."' AND timestamp<".$timestamp.") ");
    }
     
    //Si anonyme
    else{
    	mysql_query("INSERT INTO online VALUES('".$timestamp."' , '".$ip."','') ");
    	mysql_query("DELETE FROM online WHERE (ip='".$ip."' AND timestamp<".$timestamp.") ");
    }
     
    //On purge les données perimées (+ d'une minute)
    mysql_query("DELETE FROM online WHERE(timestamp<".$timestamp_debut_visite.")");
     
    //Nombre total de visiteurs (membres+anonymes) en ligne
    $retour_online_total = mysql_query("SELECT ip FROM online ");
    $online_total = mysql_num_rows($retour_online_total);
     
    //Nombre total de membres en ligne
    $retour_online_member = mysql_query("SELECT pseudo FROM online WHERE pseudo!='' ");
    $online_member = mysql_num_rows($retour_online_member);
     
    //Nombre total d'anonymes
    $online_guest = $online_total-$online_member;
     
    //Affichage des résultats
    echo '<p style="text-align:center;">';
     
    echo 'Il y a actuellement ';
    if ($online_guest>0)
    {
    	echo "<b>".$online_guest."</b> ";
    	if($online_guest>1)
    	echo "anonymes ";
    	else
    	echo "anonyme ";
    }
     
    if($online_member>0)
    {
    	if ($online_guest>0)
    	{
    		echo " et ";
    	}
    	echo "<b>".$online_member."</b> ";
    	if($online_member>1)
    	echo "membres";
    	else
    	echo "membre";
    }
     
    echo " en ligne";
    echo '</p>';
     
    if ($online_member>0)
    {
    	echo '<ul>';
    	while($array_online_member =mysql_fetch_assoc($retour_online_member))
    	{
    		$pseudo = $array_online_member['pseudo'];
    		echo '<li>'.$pseudo.'</li>';
    	}
    	echo '</ul>';
    }
     
    ?>
    Si quelqu'un a qqch de plus fin à proposer ...

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    De souvenir, sur un ancien projet, j'avais choisi une approche par fichier.
    En gros, des que quelqu'un se connecte, je crée un fichier sur le serveur ayant pour nom son @ip. (et je nettoyais les fichiers top vieux).

    Ensuite je regardais la date de création du fichier pour reprendre le mécanisme de comparaison.

    Celà peut etre une alternative si vous voulez économisez des requetes sql mais c'est moins précis.

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bah on est obligé de passer par une bdd... sinon on ne peut pas avoir d'interractivité entres utilisateurs.

    Comme dit plus haut, on peut choisir soit les fichiers, soit une bdd type mySQL. Quoi qu'il en soit, les infos doivent être écritent quelques part.

    Personnellement, sur chaque page (enfin perso, je passe tout par un index.php donc c'est easy) je met à jour un last_logon de la personne avec time().
    Pour afficher qui est online, j'affiche toutes les personnes qui ont
    time()+300 > time()

    Ca affiche les personnes avec une précision de 5 minutes, mais après, ca dépend des choix et du site. Si c'est un site avec des articles assez longs et compliqués ou en tout cas des pages destinnées à être affichées plus de 5 minutes, il faut augmenter le tems

  5. #5
    Him
    Him est déconnecté
    Membre éclairé Avatar de Him
    Profil pro
    Inscrit en
    Février 2006
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 244
    Par défaut
    ok ok, merci pour tout ces conseils.

    De toutes façon, je ne vais pas afficher "qui est en ligne" mais les derniers connectés.

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

Discussions similaires

  1. controle qui est en ligne
    Par zulad dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2012, 08h19
  2. qui est en ligne ?
    Par Invité2 dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2011, 12h47
  3. Afficher la ligne de code qui est tombée en erreur
    Par CAML dans le forum Framework .NET
    Réponses: 8
    Dernier message: 21/04/2007, 19h42
  4. Qui est en ligne
    Par guiguistuder dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/06/2006, 17h21
  5. [SQL] Qui est en ligne
    Par HwRZxLc4 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 30/04/2006, 21h10

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