web-dev-qa-db-fra.com

Comment vérifier si un visiteur est sur mon site?

Je souhaite créer un site Web accessible uniquement à une personne à la fois. Comment pourrais-je accomplir cette tâche?

J'ai regardé les compteurs Web construits en php, mais je ne pense pas que ce soit la bonne solution. Existe-t-il une requête http pour cela?

Merci d'avance.

5
Matthias Pitscher

Si vous souhaitez ne diffuser du contenu qu'à une seule personne à la fois, vous utiliserez un mod de niveau serveur. À titre d’exemple pour Nginx, vous limitez le nombre de connexions actives à 1:

serveur {limit_conn perserver 1; }

Cela sert une erreur 503 à quiconque se connecte. Il est possible de servir une page personnalisée avec l'erreur 503, en avertissant l'utilisateur de la raison pour laquelle il l'a reçue.

Si cela ne répond pas à vos besoins, vous devez proposer du contenu à tout le monde mais créer le contenu "réel" de sorte qu'un seul utilisateur à la fois puisse l'afficher. Vous créeriez une page téléchargeable par tout le monde avec un script AJAX incorporé. Le script appelle votre serveur via une API, demandant si la "page" est occupée. Dans le cas contraire, le serveur affecte cette page à la session utilisateur et renvoie le contenu. Le script l'afficherait alors. Ceux qui ne sont pas actuellement sur la 'page' recevront une page en attente et continueront à interroger. Cela vous permettrait également de former une file d'attente ordonnée du côté de votre serveur.

Une fois sur ce territoire, vous feriez mieux de poster sur Stackoverflow pour demander comment créer un tel script.

4
L Martin

Vous pouvez utiliser quelque chose comme NodeJS . C'est javascript côté serveur, avec un modèle pour le visiteur. Ce modèle se connecte au serveur JS (c'est plus simple qu'il n'y paraît).

L'avantage d'utiliser NodeJS (ou un autre langage javascript à côté du serveur) est que dès que l'utilisateur connecté quitte, un autre utilisateur peut se joindre. Vous pouvez diffuser un signal "nous avons de la place pour un", et peut-être par un signal que le prochain rejoint. Et vous pouvez donner à tous les autres utilisateurs un message Nice au lieu d’une page d’erreur (personnalisée) et éventuellement d’une file d’attente.

Cela fonctionne de manière similaire à AJAX, mais inversé. Avec AJAX, vous demandez au serveur "Puis-je entrer pour le moment?" périodiquement, alors que le socket de NodeJS a une petite connexion ouverte et que le serveur déclenche le message "OK, je suis disponible maintenant". Cela permet une alternative plus conviviale.

3
Martijn