Comment empêcher plusieurs fenêtres de navigateur de partager la même session dans asp.net
J'ai ASP.net application qui est en fait un écran de saisie de données pour une inspection physique du processus. Les utilisateurs veulent être en mesure d'avoir plusieurs fenêtres de navigateur ouvertes et saisir des données à partir de plusieurs inspections en même temps. J'ai d'abord été en utilisant des cookies de sessions, et évidemment, cela a explosé.
Je suis passé à l'aide de sessions moins de cookies, qui stocke la session dans l'URL et dans les tests cela semble résoudre le problème. Chaque navigateur de la fenêtre/onglet a un ID de session et les données entrées dans un seul n'a pas supprimé les données saisies dans l'autre.
Cependant mes utilisateurs sont de plus en plus efficace à la rupture des choses que j'ai prévu, et il semble qu'ils sont toujours gérer pour obtenir la même session entre les navigateurs parfois. Je pense qu'ils sont un copier/coller l'adresse d'un onglet à l'autre dans le but d'ouvrir l'application, mais je n'ai pas pu le vérifier encore (ils sont à un autre endroit, donc je ne peut pas le lui demander).
Autres que de leur dire de ne pas copier et coller, ou de les convaincre d'entrer un seul à la fois, comment puis-je empêcher cette situation de se produire?
source d'informationauteur Barry
Vous devez vous connecter pour publier un commentaire.
Pensez de l'utilisation de ViewState au lieu de Session, car ViewState rend les informations d'état pour le client (page HTML). Je ne sais pas si vous aurez jamais être en mesure d'obtenir un contrôle précis sur la session du navigateur comportement, parce que l'ID de session est maintenue par le navigateur de la manière dont le fabricant n'a elle. Donc ViewState est plus difficile à prévoir, non seulement, mais aussi pour les futures versions du navigateur.
c'est une très bonne question que j'ai aussi pensé à long et dur sur.
Magasin principal de votre page web dans une iframe. Avoir javascript pour vérifier si votre page web est toujours dans le parent de l'iframe. Si non, alors ils ont ouvert plusieurs fenêtres de navigateur.
Vous devez vous assurer que l'ensemble de votre application est iframe sympathique.
Je ne suis pas certain pourquoi vous souhaitez restreindre une session pour gérer un seul processus d'inspection, et puis la force de plusieurs sessions afin de permettre aux utilisateurs de travailler simultanément sur plusieurs inspections. Qui se sent comme un peu maladroit style de l'isolement.
L'application web (et des pages), devrait être capable de gérer de multiples processus d'inspection à l'intérieur d'une même session de l'utilisateur.
Toutes les données détenues dans des variables de Session ne doit pas être clairement exposés singulier de la manipulation. Ils doivent être stockés dans collections qui peuvent facilement identifier l'ensemble de données auquel appartient le processus d'inspection. Chaque page de présentation sur le serveur web devrait réaliser un identificateur de processus d'inspection qu'elle concerne, de sorte que la bonne session de jeu peut être mis en correspondance et tirés à l'utilisation.
pseudo-code concept
Les utilisateurs doivent être connectés avec des comptes différents pour accéder aux différentes inspections physiques? Il me semble que tant que le
PhysicalInspectionID
est la partie de l'URL, puis il devrait y avoir aucun problème dans l'édition de plusieurs inspections physiques en même temps.E. g.,
http://inspections.mydomain.com/edit/23
Bien sûr, si elles copier l'URL, ils vont obtenir un duplicata de l'autre fenêtre, mais cela ne leur enseignent pas à le faire. Au lieu de cela, ils ont ouvert une autre fenêtre et accédez à la bonne inspection (ou en ajouter un nouveau) via l'INTERFACE utilisateur.
Une solution à ce problème peut être mis en œuvre par le texte suivant:
Ajouter un service web asmx (ou tout autre type de services que vous pensez est approprié) à la racine de votre projet et ajoutez la méthode suivante:
Dans la page principale, ou sur chaque page, ajouter le code javascript suivant:
Noter que votre temps de réponse du site est affecté par la vitesse du service web.
C'est ce que j'utilise dans ASP.NET MVC pour interdire à des utilisateurs authentifiés à ouvrir plusieurs onglets:
Fondamentalement, ce qui définit le nom de la fenêtre première fois lorsque l'utilisateur visite la page de connexion. Après la connexion, pour chaque chargement de la page le nom de la fenêtre est testé.
Deux problèmes:
Créer un nouvel id de session lorsque la demande n'a pas de referer.
Qui résout le copier-coller l'url de problème.
Stocker l'id de session dans l'url comme vous l'avez fait.