phpbar.de logo

Mailinglisten-Archive

[php] Sessions und Browserfenster bzw. Tabs

[php] Sessions und Browserfenster bzw. Tabs

Tobias Daur daur at gmx.de
Mon Dez 20 15:40:32 CET 2004


Hi,

danke Euch dreien für die Rückmeldungen. Ich fasse das einfach mal in
einer Mail zusammen ...

Ok, offenbar reicht eine Session allein in der Regel nicht aus, um ein
Fenster/einen Tab zuverlässig zu betreuen. 

Du, Lutz, hast die möglichen Fälle wunderbar aufgedröselt.

Also braucht man eine Lösung, die weder aus nem Cookie noch aus ner
Session-ID besteht. 

Vorschläge von Sebastian:
+ Mitnehmen von IDs ins Formular, Speichern in der Session
kontextspezifisch.

Das kontextspezificshe Speichern tut's IMHO nicht in dem Fall, in dem
man mit beiden Fenstern/Tabs im gleichen Formular hin- und herwuselt.

+ Die Formulare bekommen Hashs/TIDs
Damit haben wir eine Art Sesion in der Session gebildet, müssen also in
den HTML-Code zumindest ein Hidden Field bzw. einen Link-Parameter
schreiben. Können dann aber die eigentlichen Werte in der Session
lassen, immer in einem Array, der den Hash als Key hat. 

Was ich dann aber nicht verstehe, ist, warum Du, Thorsten, der Du das ja
auch vorschlägst, dann bei Euch das nur zur Vermeidung eines zweiten
Fensters verwendet hast und nicht dazu, die Fenster eindeutig zu
identifizieren. 

Spricht da was dagegen? 

(Bis auf die Tatsache, daß es mehr Arbeit ist, als man sich eigentlich
machen möchte ...)



> > Das bedeutet, daß ich, wenn ich eine fehlerfreie Verwendung von mehreren
> > Fenstern ermöglichen will, keine Sessions verwenden kann.
> 
> Was hat das mit der Session zu tun? :-) Wenn es um Datenabhängigkeiten
...
> Dein Problem ist aber nicht die Datenspeicherung an sich, sondern die 
> Steuerung der Speicheraktionen über
> mehrere Fenster hinweg, quasi in Raum und Zeit. :-)

Na, ich möchte ja genau das tun, wofür Session zuständig sind: Bei einem
zustandslosen Protokoll die Dinge zwischenspeichern, die man sich von
Aufruf zu Aufruf merken möchte. Natürlich Fenster/Tab-spezifisch.
Offenbar können Sessions aber genau das nicht. Nicht alleine.

[Kollisionsschutz]
> Also wenn es um Kollisionsschutz geht, dann ist die Session sicherlich
> nicht der richtige Platz zur Speicherung der Daten die einen
> Zugriffskonflikt verhindern sollen. Du gehst ja selbst davon aus, daß die
> Session im Normalfall nur dem aktuellen Anwender zur Verfügung steht. Was
> ist aber nun, wenn zwei Anwender von zwei verschiedenen Rechnern aus
> gleichzeitig versuchen, auf die Daten schreibend zuzugreifen? Einen
> solchen Zugriffskonflikt kannst Du doch nicht angemessen behandeln, wenn
> Du die relevanten Daten nur in der Session der jeweiligen Anwender hältst.

Nee, das ist IMHO kein Problem. Genau dafür ist die Session da.

So dachte ich mir den Kollisionsschutz:

Jeder Datensatz hat nen Timestamp.
Beim Laden des Datensatzes wird der Timestamp in die Session
geschrieben.
Beim Schreiben wird der Timestamp aus der Session mit dem in der DB
verglichen, sind sie verschieden, knallt's. 
Das geht im Prinzip. Nur nicht bei zwei Tabs.
Dann passiert folgendes:

Person 1 liest 
Person 2 liest
Person 1 schreibt -> timestamp anders
Person 2 liest mit neuem Browserfenster -> session-timestamp wird
überschrieben
Üerson 2 schreibt mit altem Browserfenster -> es müßte knallen, tut's
aber nicht, da der timestamp in der session mit dem in der DB
übereinstimmt.

> Das kommt auf das konkrete Szenario an. Wie sieht das bei Dir denn aus?
> Hier wird leider immer nach Lösungen gefragt, ohne die Aufgabe zu nennen.

Ich denke mal, das eben beschriebene ist konkret genug. Und ist nur das
Beispiel zu dem in meiner ersten Mail beschriebenen Fall. 

Allerdings scheint mir die Aufgabe "baue eine garantiert
fenster/tabspezifische Session" (damit man nix im HTML-Code mitschleifen
muß) eigentlich recht klar, gelle? ;)

Danke schon mal für's mitdenken

Tobias


-- 
Tobias Daur :: daur at gmx.de


php::bar PHP Wiki   -   Listenarchive