Navigation dans 2 onglets/fenêtres = problème gestion session

cs_MarineW Messages postés 2 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 7 juin 2010 - 27 janv. 2010 à 16:23
dremusat Messages postés 2 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 7 juin 2010 - 7 juin 2010 à 10:33
Bonjour,

Nous utilisons ASP.Net pour des applications de gestion, en stockant les paramètres en session, pour les transmettre d'une page à l'autre.
Problème : si l'utilisateur ouvre l'appli dans un 2e onglet ou une 2e fenêtre du navigateur, les variables de session sont écrasées. Quand on revient sur le 1er onglet, les données affichées ne sont plus du tout en phase avec les paramètres en session, et ça devient vite le bazar.

Je vois 2 pistes :
- Passer les paramètres de page à page par autre mécanisme que la session
=> Par le ViewState ?? Mais comment, puisqu'il est au niveau des composants, et pas au niveau de la page ?
- Réussir à détecter que l'utilisateur a ouvert un nouvel onglet/fenêtre, et générer un identifiant différent pour chaque onglet, qui sert de suffixe aux clefs des variables stockées en session.
=> C'est à priori possible de détecter l'ouverture d'un nouvel onglet en jouant avec le window.name côté client. Mais j'ai ensuite des difficultés à remonter l'info côté serveur. J'y arrive en ajoutant dynamiquement un champs caché dans le formulaire, mais si la personne modifie l'URL et valide, on est en GET (et non plus en POST), et le champs caché ne remonte pas vers le serveur, on n'a donc plus accès aux variables en session !

J'ai fait des recherches et des tests dans ces 2 sens, mais je n'arrive à rien de concret.

Quelqu'un aurait-il trouvé une solution à cette problématique (sur une de ces 2 pistes ou sur toute autre idée), ou des infos pour me mettre sur le bon chemin ?

Merci d'avance.
Marine

3 réponses

dremusat Messages postés 2 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 7 juin 2010
6 juin 2010 à 17:49
Bonjour Marine,
Avez-vous trouvé une solution à votre problème?
J'ai en effet le même problème: le cookie de deux sessions différentes sur le même PC est partagé.
Merci de votre retour
Cordialement
Damien
0
cs_MarineW Messages postés 2 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 7 juin 2010
7 juin 2010 à 09:59
Bonjour,

Nous n'avons pas vraiment trouvé de solution à ce problème.
Une précaution importante à prendre dans le développement tout de même, pour éviter les catastrophes en mise à jour :

Sur un formulaire de mise à jour d'un objet avec un identifiant donné, toujours stocker l'identifiant de l'objet en question dans un champs caché de la page, et non pas en session. Car si on récupère l'identifiant en session, et qu'entre temps l'utilisateur a ouvert la même page sur un autre objet, et qu'il revient sur le 1er écran pour valider le formulaire, on se retrouve à écraser le 2e objet avec les valeurs du 1er !!

Si vous trouvez une solution de votre côté, ce serait gentil de la remonter ici, car nous sommes toujours intéressés !

Merci.
Marine
0
dremusat Messages postés 2 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 7 juin 2010
7 juin 2010 à 10:33
Bonjour Marine,

Merci de votre retour rapide, en effet, cette précaution est à prendre en compte.

En cherchant sur d'autres forums, j'ai également trouvé un contournement, que j'ai testé rapidement et qui a l'air de fonctionner (mais il faut encore que je pousse mes tests) et qui consiste tout simplement à ne plus utiliser les cookies, c'est à dire passer cookieless à true dans le fichier web.config de votre application:
[i]<system.web>
<sessionState timeout= "20" cookieless=" true " mode ="InProc" />
.../i
L'identifiant de la session est alors passé dans l'URL de la page appelée et sera différent pour chacun des onglet ouvert avec la même adresse, et donc les variables de session ne seront plus écrasées.

Vous pouvez tester cela rapidement sur votre environnement de test sans toucher au code source, c'est simple à mettre en oeuvre.

L'inconvénient est qu'il sera difficile à l'utilisateur d'aller directement sur une page de votre application en modifiant l'URL.
A voir donc avec ce que vous voulez vraiment.

En espérant que ca puisse vous aider.

Damien
0