Henrik Stegmaier: Wie kann ich kontrollieren, daß pro Session nur ein Browserfenster geöffnet werden kann ?

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 -> :-(

Rahmenbedingungen:

  • muss ab IE4 SP2 aufwärts funktionieren

Bisheriger Lösungsansatz:

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 -> :-)

Knackpunkt:

(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

  1. Ö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.

    1. 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)

      1. 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

  2. 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