phpbar.de logo

Mailinglisten-Archive

[php] Sessions und Browserfenster bzw. Tabs

[php] Sessions und Browserfenster bzw. Tabs

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Fre Dez 17 15:10:36 CET 2004


Hi Tobias,

Tobias Daur schrieb:
> wenn ich das richtig sehe, gelten Sessions immer für einen Browser auf
> einem Rechner.

jein. :-) Das kommt erstens darauf an, wie Du die Session hältst
(Session-Cookie oder Session-ID), und zweitens darauf, welchen Browser Du
verwendest.

Eine Session, die per Cookie gehalten wird, ist natürlich rechner-,
browser- und unter Umständen sogar browserinstanzabhängig. Eine Session,
die per Session-ID gehalten wird, ist hingegen während ihres
Gültigkeitszeitraums überall weltweit verfügbar, wenn man die Session-ID
kennt. (Gut, man könnten einen Session-Cookie natürlich mit der
Information auch fälschen, aber das ist doch eine Ecke aufwendiger. ;-) )


> Wenn nun der Anwender mehrere Tabs offen hat oder sein
> Browserfenster dupliziert, hat er in mehreren Fenstern dieselbe Session,
> oder?

Diese Aussage stimmt nach meinen Beobachtungen, sofern Du Dich auf Tabs
beziehst.

Beim Internet Explorer (derzeit noch immer Fenster statt Tabs) sieht es
aber etwas anders aus:

Variante 1:
Du hast eine Seite mit Session-Cookie. Du hast ein offenes Browserfenster,
in dem die Seite geladen ist. Gehst Du nun auf "Datei" > "Neu" >
"Fenster", dann dupliziert der IE die Seite tatsächlich inklusive Session.

Variante 2:
Du hast eine Seite mit Session-Cookie. Du hast ein offenes Browserfenster,
in dem die Seite geladen ist. Nun öffnest Du über das Start-Menü eine neue
IE-Instanz und kopierst dort die URL in die Adressleiste und rufst sie
auf. In diesem Fall wird die Session nicht übernommen. Der Cookie steht
dieser IE-Instanz nicht zur Verfügung.


> 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
beim Einfügen, Ändern und Löschen geht, dann löst Du das Problem
sicherlich nicht dadurch, daß Du auf die Session verzichtest (siehe auch
unten). Damit schaffst Du vermutlich eher noch mehr Probleme. ;-) Die
Session ist ja hier im Prinzip nur ein Datenspeicher wie ein Cookie, eine
Datei oder eine Datenbank. Dein Problem ist aber nicht die
Datenspeicherung an sich, sondern die Steuerung der Speicheraktionen über
mehrere Fenster hinweg, quasi in Raum und Zeit. :-)


> Jedenfalls,
> wenn ich die in der Session gespeicherten Daten zum Kollisionsschutz
> benötige - etwa den timestamp eines Datensatzes, um beim Schreiben
> prüfen zu können, ob er inzwischen verändert wurde. Oder die ID des
> gerade bearbeiteten Datensatzes.
> Muß ich nun alle relevanten Werte wieder mit in den HTML-Code schreiben?
> (Hidden Field, Anhang an die Links). Das kann's doch nicht sein.

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.


> Wie löst ihr das?

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 tendiere aber nicht dazu, zu jeder Lösung das passende Problem zu
schaffen. ;-) Also erst die Aufgabe (Herausforderung, NICHT Problem :-)))
), dann die Lösung. :-)


Viele Grüße

Lutz


php::bar PHP Wiki   -   Listenarchive