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
StrasGus - 14 mai 2014 à 18:02
A voir également:
- PHP - Savoir si un user est connecté ou pas
- Appareil connecté facebook - Guide
- Savoir qui est connecté sur mon wifi - Guide
- Easy php - Télécharger - Divers Web & Internet
- Manette under control switch ne se connecte pas - Forum Jeux vidéo
- Se connecter à un autre compte facebook - Guide
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
// 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
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 ;)
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 ;)
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
14 oct. 2013 à 14:13
Mais du coup, à quoi sert $_SESSION['connect'] ?
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
22 oct. 2013 à 11:44
Oui, mais elle est déjà stockée en base... Donc pas besoin de l'avoir en session...
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
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';
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';
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
16 déc. 2011 à 00:23
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
Bon courage pour la suite.
$_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.
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
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
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
13 août 2007 à 17:51
Il faut soit créer une table soit faire avec des txt ^^