PHP - Savoir si un user est connecté ou pas

Fermé
blackoo Messages postés 4 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 9 août 2007 - 9 août 2007 à 13:49
 StrasGus - 14 mai 2014 à 18:02
Salut !

Je voudrai savoir comment faire pour afficher un statut de connexion pour les users enregistrés de mon site. En fait je voudrai afficher sur les commentaires ou dans le forum un statut "en ligne" ou "hors ligne" sous le pseudo de mes membres mais je ne sais pas comment faire. Est-ce que quelqu'un peut me renseigner svp.
A voir également:

7 réponses

<?php
// Connexion à MySQL
mysql_connect("localhost", "root", "");
mysql_select_db("test");

// -------
// ÉTAPE 1 : on vérifie si l'IP se trouve déjà dans la table.
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse IP du visiteur.
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$donnees = mysql_fetch_array($retour);

if ($donnees['nbre_entrees'] == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter.
{
mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp.
{
mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}

// -------
// ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes.

// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);

// -------
// ÉTAPE 3 : on compte le nombre d'IP stockées dans la table. C'est le nombre de visiteurs connectés.
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
$donnees = mysql_fetch_array($retour);


// Ouf ! On n'a plus qu'à afficher le nombre de connectés !
if($donnees['nbre_entrees'] > 1 )
{
echo '<p>Il y a actuellement ' . $donnees['nbre_entrees'] . ' visiteurs connectés sur le site !</p>';
}

else
{
echo '<p>Il y a actuellement ' . $donnees['nbre_entrees'] . ' visiteur connecté sur le site !</p>';
}
?>

voila mais aprés tu le fait en include
7
Plus simple vous créez un champ connect avec une valeur booléenne (0/1)
Quand la personne se connecte sur le site , on créé une SESSION['connect'] qui prendra la valeur 1

on l'update dans notre bd , 1 dans le champ

Quand il se deconnecte $_SESSION['connect']=0

on l'update dans notre bd, 0 dans le champ
il ce peut que le client puissen fermer la page sans se déco :

==> on fait un script qui fait le test chaque 5 min ;)
3
vous faite juste apres un select * from X where enligne=1
et vous affichez
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
14 oct. 2013 à 14:13
Mais du coup, à quoi sert $_SESSION['connect'] ?
0
elle sert a stocker la variable 1ou0
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 oct. 2013 à 11:44
Oui, mais elle est déjà stockée en base... Donc pas besoin de l'avoir en session...
0
Tiller Messages postés 781 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 14 septembre 2008 210
9 août 2007 à 14:12
Lorsque la personne change de page, sa marque le time() dans la base de donnée, et une fois sur la page, toute les x secondes, il met a jour le time() dans la bdd, via une iframe ou via ajax.

Sinon il me semble qu'il y a une solution de regarder si la session est toujours valide en explorant le dossier session mais je ne sais aps comment cela fonctionne.

Et apres tu defini un temps d'inactivité qui le mieu est le x seconde de tout à l'heure plus une dizaine de seconde pour les lag

donc un truc du style

if ($dans_la_bdd['time'] >= (time() - (x + 10))) echo $dans_la_bdd['pseudo'].' est en ligne';
1
Super, j'y avait pas penser au refresh ajax !

Enfin quelque chose de sensé !!!
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 août 2007 à 14:14
Bonjour,

Bon, déjà, le protocole HTTP est en mode « non connecté », ce qui signifie que savoir si quelqu'un est connecté ou non n'a, stricto sensu, pas lieu d'être.
En règle général, on se définit un délai par rapport à la dernière action de l'internaute. Par exemple, on peut dire que si un internaute a changé de page dans les 5 dernières minutes, alors il est connecté. Ou encore, si sa session est active sur le serveur.

Pour répondre à ton problème, je vois deux moyens.
1 - utiliser une table dans la base de données, qui contienne les ID de tes utilisateurs, et la date de dernière action. Dès qu'il change de page, hop, tu la modifies. Ensuite, tu fais une requête dans cette table qui va chercher tous les utilisateurs qui ont fait une action dans les X dernières minutes.
Ca peut paraître un peu lourd, mais si tu indexes bien ta table suivant la date, et surtout si tu n'as pas 10 000 visiteurs par jour, il n'y a pas de raison que ça pose problème.

2 - au niveau serveur. J'ai fait une petite recherche sur le site www.php.net, mais je n'ai pas trouvé de fonction ou variable globale qui soit capable de donner des informations sur les autres sessions que celle de l'utilisateur courant. C'est peut-être fait exprès, pour des raisons de sécurité, encore que j'en doute... C'est peut-être aussi moi qui n'ait pas bien regardé !

Sinon, il existe des fora gratuits, comme phpBB ou d'autres, qui le font : tu peux t'amuser à les télécharger et essayer de comprendre comment ça fonctionne.

Xavier
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
16 déc. 2011 à 00:23
Je ne suis pas sur de ce que je vais dire mais je pense que ceci pourrais faire la faire :

$_SESSION['connect'] == true;

if($_SESSION['connect'] == true)
{
echo "Ce membre est connecter";
}
else
{
echo "Ce membre est hors ligne.";
}

Donc tu place ceci
$_SESSION['connect'] == true;
dans la page de connexion et ceci dans la page ou tu veut afficher si il est connecter ou pas :
if($_SESSION['connect'] == true)
{
echo "Ce membre est connecter";
}
else
{
echo "Ce membre est hors ligne.";
}


Bon courage pour la suite.
1
blackoo Messages postés 4 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 14:39
J'ai déja essayé de télécharger PHPBB pour comprendre comment il font mais je n'ai pas réussi. Tiller j'ai compris ton code mais dois-je créer une table spéciale pour ça ou pas ? Merci
0
Tiller Messages postés 781 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 14 septembre 2008 210
13 août 2007 à 17:51
Il faut soit créer une table soit faire avec des txt ^^
0