2010-11-24 21 views
0

J'ai besoin d'avoir plusieurs iframes sur une page, qui interagissent tous les uns avec les autres. La façon dont notre application est présentée nécessite que ces iframes s'exécutent dans la même session, afin de partager des données sur ce qui est sélectionné et etc. avec les autres.Chargement de la même session dans 2 iframes sur le même domaine

Le problème est lors du chargement de la première page, les deux iframes chargent une URL, qui n'aura évidemment pas le cookie de session dans la requête. Donc les deux iframes créent une nouvelle session et y mettent leurs données. Cependant, ils envoient tous les deux leur cookie de session, et la dernière demande écrase les précédentes. À partir de là, les deux iframes utilisent la même session, mais seul le dernier iframe chargé contient des données de session valides.

Si j'actualise la page "conteneur", tout fonctionne correctement (parce que le cookie de session est valide). Malheureusement, en raison de limitations dans l'application "conteneur", nous ne pouvons pas spécifier un ordre de chargement explicite dans ce champ. Déjà pensé de cette solution ...

+0

Avez-vous des données qui pourraient lier les sessions ensemble? Peut-être userID ou IP (si une application interal). – David

+0

Oui, je peux obtenir les deux de la demande à mon application, mais je ne peux pas l'obtenir à partir de la page de conteneur. Pas vraiment sûr de comment je peux l'utiliser si tard dans le jeu. – XwipeoutX

Répondre

0

alors je suis cela a fonctionné (je devrais avoir publié ce billet comme il y a un an) ...

Fondamentalement, lorsque l'utilisateur charge la page, je me assure que la session cookie est identique à la requête en cours d'exécution. Donc, sur la demande # 1 par un utilisateur particulier, je continue comme d'habitude, sauf que je note que cet utilisateur a une demande.

Toutes les demandes arrivant pendant que # 1 est toujours en cours sont bloquées dans OnBeginRequest, jusqu'à ce que la session # 1 soit initialisée. Lorsque # 1 obtient sa session initialisée, il met à jour une instance partagée avec les informations de session, puis libère tous les autres threads.

Fonctionne bien.