Session ID an Fenster binden => 2 Browser Fenster, 2 IDs

michel_tr

Mitglied
Hallo,

ich habe eine Frage zu Sessions: Ist es möglich eine Session auf nur ein Browser Fenster zu beschränken?

Ich versuche es mal etwas anschaulicher zu beschreiben: Wenn ein Benutzer auf meiner Seite einen Link (mutwillig ;) ) in einem neuen Fenster öffnet, soll die Session für das neue Fenster ungültig sein. Für das "parent Fenster" - also das alte Fenster - soll jedoch die alte Session weiterhin gültig sein.


Wozu ich das brauche:
Ich generiere aus einer Session Variable ein Submenu. Dieses setzt sich dynamisches zusammen.

Ich habe die Hauptmenüpunkte A B und C und die Unterseiten a b und c.

Um auf die Seite c zu gelangen kann man z.B. den Weg über A -> a -> c wählen.
Jedoch sind z.B. auch folgende Wege denkbar: A -> c oder B -> b -> c

Das Submenu zeigt letztendlich nur den Weg den der Benutzer genommen hat. Dazu habe ich eine Session Variable ($_SESSION) die bei dem Weg A -> c wie folgt aufgebaut ist:
Code:
       Array ( => Array         ( => ?sec=A 
        => Menü Punkt A         )      
          => Array         ( => ?sec=c
        => Unterpunkt c )      
         )
Die Variable setzte ich mit einer kleinen Funktion zusammen, die nach folgenden Regeln arbeitet:


Falls der Benutzer bei einem Hauptmenüpunkt steht: Array lerren und $_SESSION füllen.
Bei einem Unterpunkt: durchlaufe Array und suche, ob dieser Menüpunkt schon vorhanden ist. Wenn ja: lösche alles dahinter. Wenn nein: Füge neues Element am Ende ein.
Lange Rede kleines Problem:
Wenn der Benutzer jetzt ein zweites Fenster öffnet, haut das natürlich mein Submenu durcheinander.

Mein Post ist jetzt doch ein wenig länger geworden als erwartet. Deshalb gleich noch eine Frage hinterher: Hat jemand vielleicht eine andere Idee wie man ein Submenü so dynamisch wie beschrieben, aufbauen kann?

Ich freue mich auf eure Lösungsvorschläge, und bedanke mich für's durchlesen :)
 
Meiner Meinung nach dürfte das nicht möglich sein, wenn der Automatismus von PHP aktiviert ist. PHP versucht sofort einen Cookie zu setzen, wenn eine Session gestartet wird.

Wenn du es schaffen kannst dieses Verhalten abzuschalten und dann die Session ID immer in den Links mitgibst, kannst du mehrere Sessions gleichzeitig in verschiedenen Browser Fenstern des selben Browsers offen haben.

Hmm ... das löst aber dein Problem nicht ....

Vielleicht wäre es besser, du speicherst die Wege in einem Cookie ... Keine Ahnung wie du es dann Fenster unabhängig löst, aber die Sessions interpretieren ja nun mal nur die Session ID und kennen ja nicht das Fenster was geöffnet ist. Aus Sicht der Session ist es auch egal, ob jemand den Link kopiert und vom IE in einen Firefox startet.

Du müsstest also irgendwie in einem Cookie eine Information hinterlegen. Kann man Cookies nur an bestimmte Fenster binden? Ich glaube auch das ist nicht möglich ...

Ciao, Jörg
 
Zuletzt bearbeitet:
F.o.G. hat gesagt.:
Wenn du es schaffen kannst dieses Verhalten abzuschalten und dann die Session ID immer in den Links mitgibst, kannst du mehrere Sessions gleichzeitig in verschiedenen Browser Fenstern des selben Browsers offen haben.

Hmm ... das löst aber dein Problem nicht ....
Die Session ID per Link übergeben könnte schon mein Problem lösen. Ich könnte einen neuen Menüpunkt "neues Fenster öffnen" einbauen. Da die Seite nicht öffentlich ist, wäre das schon eine brauchbare Lösung - Vielen Dank für den Tip!

F.o.G. hat gesagt.:
Vielleicht wäre es besser, du speicherst die Wege in einem Cookie ...
Wie du schon sagtest, da stehe ich wieder vor dem selben Problem.


Danke nochmal für deinen Post. Falls noch jemand eine andere Idee oder Verbesserungsvorschläge hat, wie man so ein Submenu aufbauen kann, bin ich ganz Ohr ;)
 
Zurück