2010-11-24 6 views
0

Ich habe eine Anforderung, mehrere Iframes auf einer Seite zu haben, die alle miteinander interagieren. Die Art und Weise, wie unsere Anwendung ausgelegt ist, erfordert, dass diese Iframes in derselben Sitzung ausgeführt werden, um Daten über die ausgewählten und usw. mit den anderen zu teilen.Laden der gleichen Sitzung in 2 iframes auf der gleichen Domäne

Das Problem ist beim ersten Laden der Seite, beide Iframes laden eine URL, die offensichtlich nicht das Session-Cookie in der Anfrage haben wird. Daher erstellen beide Iframes eine neue Sitzung und legen ihre Daten darin ab. Beide senden dann ihren Sitzungscookie herunter und die letzte Anforderung überschreibt die vorherigen. Von dort verwenden beide iframes dieselbe Sitzung, aber nur der letzte geladene iframe enthält gültige Sitzungsdaten.

Wenn ich die "Container" Seite aktualisieren, funktioniert alles gut (weil der Sitzungscookie gültig ist).

Leider können wir aufgrund der Einschränkungen in der Anwendung "Container" keine explizite Reihenfolge des Ladens angeben. Schon dachte diese Lösung ...

+0

Haben Sie irgendwelche Daten, die die Sitzungen miteinander verknüpfen könnten? Vielleicht Benutzer-ID oder IP (wenn eine interne App). – David

+0

Ja, ich kann beide von der Anfrage zu meiner App bringen, aber ich kann sie nicht von der Containerseite bekommen. Nicht wirklich sicher, wie ich es so spät im Spiel verwenden kann. – XwipeoutX

Antwort

0

Also habe ich dies herausgearbeitet (ich wirklich diese wie vor einem Jahr geschrieben haben sollte) ...

Grundsätzlich, wenn der Benutzer die Seite lädt, stelle ich sicher, dass die Sitzung cookie ist dasselbe wie die aktuell ausgeführte Anfrage. Auf der # 1-Anfrage eines bestimmten Benutzers gehe ich also wie gewohnt vor, außer dass ich notiere, dass dieser Benutzer eine Anfrage hat.

Alle Anfragen, die eingehen, während # 1 noch läuft, werden in OnBeginRequest gehalten, bis die Sitzung bei # 1 initialisiert wurde. Wenn # 1 seine Sitzung initialisiert wird, aktualisiert er eine gemeinsam genutzte Instanz mit den Sitzungsinformationen und gibt dann alle anderen Threads frei.

Funktioniert gut.

Verwandte Themen