2010-12-11 5 views
2

J'essaie de faire une chose où il est dit "X nombre d'utilisateurs consultent actuellement cette page" via PHP. Comment ferais-je cela? Je vous remercie.Détecter les utilisateurs en ligne: PHP

+0

Si vous avez un trafic important, ce n'est pas une bonne idée. –

+2

Cette question devrait répondre à la vôtre: http://stackoverflow.com/questions/890820/find-out-how-many-users-are-online-in-php – thejh

Répondre

1

Il n'existe aucune méthode de sécurité, mais il existe plusieurs options.

  1. Enregistrer la dernière visite de la personne dans la base de données. Si c'est dans un certain seuil (disons 5 minutes), ils sont en ligne.
  2. De cette façon est moins fiable, mais parfois ping (terme correct?) le serveur avec AJAX pour lui dire que vous êtes toujours en ligne. Cela permet à l'utilisateur d'avoir une page en place pendant une longue période sans que leur "ligne" soit expirée.

Vous pouvez même utiliser une combinaison des deux.

Si vous avez beaucoup de trafic, vous devriez mettre en cache la première option. Vous ne voulez pas exécuter SELECT * FROM users WHERE lastvisit > UNIX_TIMESTAMP() - 18000 pour chaque chargement de page. Une autre option consisterait à lancer un démon à chaque minute, et de stocker les utilisateurs en ligne dans une table distincte.

Remarque: cela suppose que vous vouliez dire vraiment utilisateurs lorsque vous l'avez dit. Si vous voulez le nombre de invités en ligne, voir la réponse de @ code_burgar.

0

Vous ne pouvez vraiment pas parce que vous ne savez pas quand quelqu'un a cessé d'afficher une page.

2
  1. Créer une table de base de données qui stocke:
    • Un hachage A chaque pageload, hachage magasin IP de l'utilisateur et userAgent combinaison
    • Timestamp
  2. de l'utilisateur combinaison IP et userAgent ainsi en cours horodatage dans la base de données
  3. Base de données de requêtes pour le nombre d'entrées uniques dont l'horodatage correspond à la plage NOW() - X
  4. Afficher le nombre approximatif d'utilisateurs actifs

développer l'idée de base par

  1. Avoir un intervalle donné naissance appel AJAX à un script qui met à jour db pour tenir compte des utilisateurs restant sur une page pour plus de X minutes
+0

Cette réponse serait pour compter le nombre de "invités" en ligne . – Jonah

+0

Comme l'OP n'a pas précisé ce qu'il considère comme "utilisateurs", votre commentaire peut être pertinent ou non :) –

4

Il n'y a pas de concept de "visualisation en cours" sur le web, car tout se passe comme des connexions non persistantes. Le plus proche que vous pouvez obtenir est "Les utilisateurs de X ont vu cette page au cours des dernières N secondes" (et si vous choisissez une valeur de N qui est assez petite, vous pourriez dire que c'est à peu près équivalent).

Ensuite, pour avoir l'utilisateur une vue des données basées sur les actions de l'utilisateur B, en PHP, vous devez avoir un stockage persistant, le plus souvent comme une base de données comme MySQL (mais memcached ou xcache pourrait fonctionner aussi bien , si vous ne vous inquiétez pas vraiment de perdre les données si le serveur tombe en panne).Il suffit d'écrire des éléments tels que «l'utilisateur X la page Y affichée à l'instant Z» dans votre stockage persistant, et lorsque la page Y est affichée, interrogez le stockage pour toutes les vues de la page Y dans les N dernières secondes et comptez le nombre de différents utilisateurs.

Dans SQL:

INSERT INTO visits (user, page, time) VALUES (?,?,NOW()) 

SELECT COUNT(DISTINCT user) FROM visits 
WHERE page = ? AND time < NOW() - INTERVAL 10 SECONDS 

Vous pourriez avoir l'utilisateur dit le serveur « Je suis toujours regarder » en soumettant une requête AJAX régulièrement (ou ayant une petite iframe sur votre page qui se recharge toutes les quelques secondes sans JavaScript).

+0

+1 pour l'idée