8791 sujets

Développement web côté serveur, CMS

Bonjour,
j'ai vu qu'il existait differentes techniques pour savoir si un utilisateur est connecté sur son site.
Certaines avec un accès bdd
d'autre avec les variables $_SESSION
et d'autre encore avec les variables d'environnements.
Ma question est la suivante : laquelle de ses méthodes vaut-il mieux utilisé pour réaliser un module de discussion instantanée (facebook like) ou l'on voit qui est connecté dans le but d'ouvrir une conversation avec l'un des utilisateurs connecté ?
Modifié par Su4p (30 Dec 2010 - 12:17)
Salut,

je pense que la sauvegarde de la date du dernier ping (que tu ferais en ajax toutes les x secondes) doit se faire en base de donnée.
Merci,
j'aime la solution du ping ! En tout cas ça me permettrais vraiment de savoir si un utilisateur est connecté ou pas. Cependant je doute que mon hébergeur me laisse faire, pour des raisons de sécurités (à vérifier).
Il n'y a pas de raison que ton hébergeur te refuse des opérations comme ça. En ajax tu fais un simple appel à un script en PHP (ou tout autre language server), ce dernier écrivant en base les infos dont tu as besoin. Bien sûr tu te sert des infos de session pour reconnaitre l'utilisateur qui fait appel à ce script.
De plus après réflexion Smiley sweatdrop :
si l'utilisateur reste connecté a internet
mais n'est plus sur mon site
la fonction ping me renverras vrai alors que l'utilisateur n'est plus réellement connecté à mon application. Donc cette méthode est comme les autres et ne permet pas vraiment de savoir si l'utilisateur est connecté ou non.... Smiley confus

Une autre idée ???
Modifié par Su4p (29 Dec 2010 - 19:06)
Modérateur
Bonjour,

L'idée est la suivante :

- Le visiteur va sur ton site
- Dans chaque page du site, il y a un petit bout de Javascript qui fait un hit en AJAX sur une autre page PHP, appelons-la ping.php. Ce n'est pas un ping au sens que l'on connaît en informatique, mais seulement un genre de petit refresh au X secondes
- À chaque hit reçu, ping.php sait que le visiteur est toujours sur ton site.
- Si après un délai bien précis ping.php n'a pas été appelé par le visiteur, c'est qu'il n'est plus sur le site (ou qu'il a désactivé son javascript)

Plus le délai entre chaque hit est petit, plus précis sera tes statistiques, mais il vaut mieux éviter d'en abuser au risque de consommer trop de ressources.

Tu peux aussi faire la même chose à chaque chargement de page si tu veux inclure les visiteurs sans Javascript, au lieu de faire des hits en AJAX.

Tu comprends l'idée générale?
Modifié par Tony Monast (29 Dec 2010 - 19:36)
Script PHP appelé en AJAX
Je considère que les infos concernant l'utilisateur sont en session sur le server

ainsi que cette table

CREATE TABLE `ping` (
  `id_user` int(10) unsigned default NULL,
  `last_ping` int(10) unsigned NOT NULL default '0',
  UNIQUE KEY `uk_id_user` (`id_user`),
  KEY `idx_ping_date` (`last_ping`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



session_start();
if(!isset($_SESSION['user_data']['id'])){
    exit;
}
//Connexion à ta base de donnée

    //Insertion en base de donnée de la date actuelle pour l'utilisateur en cours
$sqlRequest = '
    REPLACE INTO `pings`
    (`id_user`, `last_ping`)
    VALUES
    ('. $_SESSION['user_data']['id'] .', '. time() .');
';
mysqli_query($mysqlLink, $sqlRequest);
//OU
mysql_query($sqlRequest);
//en fonction des pilotes que tu utilises

    //Récupération des utilisateurs actifs durant les 15 dernière secondes
$sqlRequest = '
    SELECT `Ping`.`id_user`
    FROM `pings` AS `Ping`
    WHERE `Ping`.`last_ping` >= '. time() - 15 .';
';
$sqlRequestResult = mysqli_query($mysqlLink, $sqlRequest);

    //Renvoi les données au script ajax (format JSON c'est plus pratique à gérer côté javascript)
$activeUser = array();
while($row = mysqli_fetch_assoc($sqlRequestResult)){
    $activeUser[] = $row['id_user'];
}
exit(json_encode($activeUser));


Amuse toi bien
Su4p a écrit :
De plus après réflexion Smiley sweatdrop :
si l'utilisateur reste connecté a internet
mais n'est plus sur mon site
la fonction ping me renverras vrai alors que l'utilisateur n'est plus réellement connecté à mon application. Donc cette méthode est comme les autres et ne permet pas vraiment de savoir si l'utilisateur est connecté ou non.... Smiley confus

Une autre idée ???



Non non, avec ma méthode, s'il ferme la fenêtre de son navigateur, il apparaîtra déconnecté.
Merci beaucoup Tony Monast et bilhackmac, je vais partir sur cette idée sauf que je vais mettre ping dans ma table et dans ma classe utilisateur avec un petit

utilisateur::getLesutilisateursConnectes();

et

$_SESSION["monUtilisateur"]->updatePing();

Tony Monast ne t'inquiète pas pour l'ajax toute mon application est en ajax donc javascript obligatoire. Reste plus qu'à trouver le bon compromis entre rapidité et précision pour le timer.
Modifié par Su4p (30 Dec 2010 - 12:29)