2 votes

Comment éviter d'ouvrir deux fenêtres de navigateur ?

Je voudrais éviter la possibilité d'ouvrir deux fenêtres (ou onglets) d'application. C'est à dire, si mon application (LAMP+Javascript) est installée sur http://www.domain.com et l'utilisateur navigue sur la page http://www.domain.com/user/ il/elle ne peut pas ouvrir une autre fenêtre comme http://www.domain.com/system/ . S'il ouvre une autre fenêtre, l'application doit afficher un message d'erreur.

Est-ce possible ?

Pour les curieux : J'ai besoin de ce comportement car mon application utilise certaines données de session pour identifier des séquences d'actions. Si l'utilisateur ouvre une nouvelle fenêtre sur le même navigateur, normalement tout est correct, mais s'il commence une nouvelle séquence, la précédente (dans l'autre fenêtre) sera perdue.

2voto

Neal Points 68710

Vous ne peut pas éviter qu'une personne ouvre deux fois votre site web.

Vous pourriez être en mesure d'utiliser une nouvelle clé de session pour chaque page, mais cela peut devenir un peu compliqué...

2voto

clops Points 1722

Comme indiqué plus haut, vous ne pouvez pas empêcher quelqu'un d'ouvrir deux fois votre site Web. Mais votre problème est, comme je le vois, de vous assurer que chaque session de navigation est unique. Il existe de nombreuses approches pour y parvenir, l'une d'entre elles pourrait être de générer un nombre aléatoire par le client et de l'envoyer via ajax au backend pour être utilisé à la place d'un identifiant de session, vous pourriez avoir quelques problèmes de persistance, mais ils sont tous faciles à résoudre.

2voto

Michal Points 1589

Bien que ce que tous les autres ont dit ici soit exact, à savoir que vous ne pouvez pas empêcher quelqu'un d'ouvrir votre site Web deux fois, il existe peut-être une solution de rechange pour vous. Notez qu'il ne s'agit pas d'une solution à 100 % et que vous devrez développer un code supplémentaire sur cette base.

D'après ce que je comprends, vous avez les problèmes suivants :

  1. Comment déterminer si un utilisateur a votre page ouverte avec une fenêtre/un onglet qui partage des données de session (c'est-à-dire deux onglets dans Chrome, 2 fenêtres Chrome, etc.) - c'est pourtant la partie la plus facile.
  2. Comment déterminer si un utilisateur a votre page ouverte dans un navigateur différent (c'est-à-dire ouverte dans FF et Chrome en même temps) - c'est là que le bât blesse.

Cependant, vous pouvez utiliser LSO - Objets partagés locaux pour y parvenir. Il s'agit d'éléments de données similaires aux cookies basés sur Flash et stockés du côté du client. ET ILS SONT COMPATIBLES AVEC TOUS LES NAVIGATEURS ET TOUS LES DOMAINES. Vous pouvez trouver une belle bibliothèque appelée EVERCOOKIE pour les utiliser. aquí .

En plaçant un tel cookie, vous pourrez suivre l'utilisateur même s'il ouvre une nouvelle fenêtre ou même s'il ouvre votre page dans un autre navigateur, dans la mesure où les navigateurs partagent la même installation Flash, etc.

Notez que cela n'empêchera pas quelqu'un d'ouvrir directement deux fenêtres, mais cela vous permet de l'envoyer dans le même état de séquence qu'il se trouve dans l'autre fenêtre par exemple.

Vous devez également savoir que ce n'est pas une solution à 100 %. Il y aura toujours une astuce pour contourner ce problème, même si je pense que les utilisateurs normaux n'y parviendront pas...

1voto

ManseUK Points 26965

Le seul moyen auquel je pense est de masquer/supprimer le contenu si l'utilisateur est connecté ailleurs.

Vous devez donc a) demander à l'utilisateur de se connecter... et b) enregistrer le moment où l'utilisateur se connecte... et c) enregistrer le moment où l'utilisateur se déconnecte.

Cette méthode pose encore des problèmes : quand décide-t-on que l'utilisateur a fermé son navigateur et qu'il doit être retiré de la liste des "connectés" ?

En bref, la réponse est que vous ne pouvez pas arrêter de manière fiable ce .....

0voto

Neeraj Points 2239

Je le ferais en utilisant des sessions du côté serveur (c'est-à-dire php), et en utilisant les événements load et window.unload pour établir et détruire les sessions.

Si une session est déjà créée, toute fenêtre qui s'ouvre ensuite doit vérifier la valeur de la session et forcer sa fermeture après avoir affiché un message d'erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X