Mailinglisten-Archive |
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