Wie kann ich kontrollieren, daß pro Session nur ein Browserfenster geöffnet werden kann ?
Henrik Stegmaier
- asp.net
Hallo zusammen,
mein Problem ist folgendes: Ich schreibe gerade eine ASP-Anwendung welche Ststusinformationen serverseitig in Sessionvariablen speichert. Solange der Benutzer nur ein Browserfenster pro Session offen hat, sind die Statusinformationen genau diesem Fenster zugeordnet. Öffnet der Benutzer jedoch mehrere Fenster kann ich nicht kontrollieren von welchem die requests kommen und somit die Statusinformationen nicht zuordnen. -> chaos -> :-(
Meine Idee um das Problem zu lösen war, daß beim ersten Aufruf einer Seite der Anwendung ein neues Fenster mit dem Namen XYZ (wird pro Session individuell generiert) geöffnet wird. Jede Seite enthält ein JavaScript, welches prüft ob die Seite im Fenster XYZ aufgerufen wurde. Wenn nicht in diesem öffnen. Wenn die requests dann immer nur aus diesem Fenster kommen sind die serverseitigen Statusinformationen genau zuordenbar -> :-)
(1)Unter IE5 öffnet der Browser mit window.open(... name="XYZ" ...) die Inhalte bei jedem Aufruf der Funktion window.open(... name="XYZ" ...) immer im selben Fenster. Genau das will ich.
(2)Unter IE4 öffnet der Browser immer ein neues Fenster. Die haben dann zwar alle den Namen "XYZ" aber das bringt mir ja auch nix -> :-(
---> gibt es eine Möglichkeit damit‚s immer wie bei (1) beschrieben funktioniert ?
---> hat jemand eine solche Problematik (zuordnung Browserfenster - Servervariable) behandelt und dafür einen Lösungsansatz gefunden ?
Wäre schön wenn mir jemand weiterhelfen könnte
viele Grüße
Henrik
Öffnet der Benutzer jedoch mehrere Fenster kann ich nicht kontrollieren von welchem die requests kommen und somit die Statusinformationen nicht zuordnen. -> chaos -> :-(
Das ist eine Frage Deiner Buchführung.
Ich weiß nicht genau, was Du über ASP alles sehen kannst, aber es muß ja ähnlich viel sein wie bei CGI. Dort hätte ich folgende Möglichkeiten:
1. Wenn ich einen Request auslöse, dann sende ich in der URL entsprechende Parameter mit, die mir beschreiben, was der Anwender im Browser alles getan hat (darüber kann ich ggf. mit JavaScript Buch führen).
2. Ich sehe die CGI-Variable HTTP-REFERER, welche den URL der zuvor angezeigten Seite enthält. Beim vorherigen Zugriff kann ich mir den aktuellen URL in der serverseitigen Zustandsvariablen merken, und wenn beide Werte nicht übereinstimmen, dann merke ich das auf dem Server und kann reagieren.
Zu Deinen Duplikatfenstern: Wenn sich der Anwender "einwählt", also Deine Seite erstmals betritt, dann kannst Du im Client eine Identität berechnen (z. B. ein String aus Datum und Uhrzeit und IP-Adresse und Zufallszahl), mitsenden und auf dem Server speichern. Öffnet er ein neues Fenster, dann erzeugt er dafür ggf. eine neue Identität, welche Du von der vorherigen unterscheiden kannst.
erst mal vielen dank für die Info, ich habe aber noch ein paar Fragen zu Deiner Antwort:
...dann sende ich in der URL entsprechende Parameter mit ... / Identität mitsenden um Fenster zu erkennen.
-> gibts eine Möglichkeit eine URL bzw. deren Parameter eines requests noch zu verändern, nachdem der Benutzer diesen durch anklicken eines Links/ Formulars ausgelöst hat ? (Ich will vermeiden sämtlich Links auf sämtlichen Seiten mit einem dynamischen Parameter präparieren zu müssen)
- Ich sehe die CGI-Variable HTTP-REFERER, welche den URL der zuvor angezeigten Seite enthält...
Die Variable HTTP-REFERRER kann ich mit ASP aus dem HTTP-Header auslesen. Aber sie ist leider nicht immer gefüllt -> :-(. Auch wenn ich mir die "roh-form" des HTTP-Headers anzeigen lasse kann ich meistens nix finden.
-> gibt‚s Einschränkungen wann HTTP-REFERRER funktioniert und wann nicht?
mfg Henrik
Hi
ich denke mal 100% wirst du das nie verhindern können
das mit mehreren Fenstern gearbeitet wird , und wenn
wird es zumindest ein Riesenaufwand sein , daher würde
ich eher überdenken ob sich dein eigenes Problem nicht
anders lösen lässt , wenn sich die Session-Variable in
einem Fenster ändert steht sie ja jeden anderem Fenster
auch zur Verfügung , d.h. bei jeder Seite müssteste evtl.
ne Variable setzen die den Status der letzten Aktion
enthält , jede Seite die danach aufgerufen wird fragt
die erstmal ab und reagiert darauf.
Ohne genau zu wissen wo dein Problem liegt kann man da
natürlich nicht viel mehr zu sagen , aber wie schon
gesagt , ich denke der Ansatz mit Gewalt auf ein Fenster
beharren zu wollen ist von Grund auf verkehrt.
gruss
Jens