phpbar.de logo

Mailinglisten-Archive

[php] Sessions und Browserfenster bzw. Tabs

[php] Sessions und Browserfenster bzw. Tabs

Tobias Daur daur at gmx.de
Mit Dez 22 10:52:42 CET 2004


Hi Lutz,

erstmal danke f�r die M�he die Du Dir machst (und danke f�r die
vorab-neugierigmach-pm ;)).

> Wir haben uns etwas verzettelt und drehen uns im Kreis, weil vermutlich 
> den meisten - bis heute Morgen einschlie�lich mir - nicht in G�nze klar 
> ist, worum es Dir praktisch geht. Es fehlt so ein Bi�chen der 

Jo, da sieht man mal wieder, wie kompliziert zwischenmenschliche
Kommunikation ist :)


Dein Ansatz bietet, soweit ich das ausprobiert habe, tats�chlich einen
�berschreibschutz, der auch bei mehreren Fenstern/Tabs zuverl�ssig
funktioniert. Und das ohne die �bergabe von Werten - bis auf die ID und
die Session (Cookie) nat�rlich. 
Mit der Session-Variable stellst Du sicher, da� nur der Browser mit
dieser Session schreiben kann. Da� er es nur mit dem richtigen Fenster
kann, machst Du einfach dar�ber, da� Du einen Zweitaufruf w�hrend der
Bearbeitungszeit verhinderst. 

Was mir daran nicht so gef�llt:
Du identifizierst nicht wirklich den richtigen Tab/das richtige Fenster.
Deshalb kann bei Deinem Skript auch das eigene (bearbeitende) Fenster
nicht neu geladen werden - der Reload wird blockiert.
Au�erdem begrenzt der Schutz stark die praktische Anwendung, denn Du
+ zwingst den Anwender zu einer Bearbeitung innerhalb einer bestimmten
Zeit
+ f�ngst F�lle ab, die gar nicht zu einer Kollision f�hren,
beispielsweise wenn nur einer der Bearbeiter wirklich speichert.

Damit machen wir aber ein zweites Fa� auf. 

Fa� 1: Wie realisiert man Sessions garantiert fenster/tab-bezogen? 
Das ist wieder allgemein gesprochen das Thema: Sessions identifizieren
einen Compi/Anwender. Zur Anwendungssteuerung braucht man aber IMHO
einen Mechanismus, der ein Fenster identifiziert. 

Fa� 2: Wie macht man einen 100% funktionierenden Kollisionsschutz, der
die Arbeit m�glichst wenig behindert. 

Um mal das zweite Fa� zu beackern, denn darauf zielen ja die Punkte ab,
die mir bei Deinem Modell nicht so gefallen (hmm, mu� man jetzt einen
neuen Betreff setzen?):

Ein Kollisionsschutz sollte
+ nicht zeitbasiert sein (trotz zustandslosem Protokoll)
+ nur bei einer echten Kollision greifen

Und genau dies leistet folgendes Modell:
+ jeder Datensatz bekommt einen timestamp
+ gepr�ft wird ausschlie�lich beim Schreiben
Wenn's knallt, gibt das Skript ein Diff aus, mit der M�glichkeit, die
beiden Datens�tze zu vergleichen und einen korrekten zu speichern.

Wenn ich mich nicht irre, ist das auch in etwa das, was cvs macht, oder?

In der Edelversion wird dann auch noch ausgegeben, wie der Datensatz
aussah, bevor er von einem anderen Fenster/User ge�ndert wurde. Dazu mu�
man sich den DS vor dem �ndern in der tab/fenstersicheren Session
wegspeichern. 

Und so m�chte ich den Kollisionsschutz eigentlich auch bauen - nur mit
dem von mir in meiner letzten Mail beschriebenen Problem, das entsteht,
wenn ich den timestamp in der Session zwischenspeichere und einen
zweiten Tab aufmache. 

Das Problem beim Konstruieren einer tabsicheren Session scheint ja der
Moment zu sein, in dem man einen Tab dupliziert. 
Wenn man einfach mit einem zweiten Tab auf die Site geht und lossurft,
kann man das ja, wie Sebastian es vorschl�gt, �ber eine zuf�llig
generierte Formular-ID in der Session speichern - dann h�tte dasselbe
Formular mit dem selben Datensatz, zweimal aufgerufen, einen getrennten
Eintrag in der Session. 
Nur in dem einen Fall, in dem man einen Tab mit einem Formular soeben
dupliziert hat, sind's dieselben. Vielleicht mu� man den Fall einfach
vernachl�ssigen (womit ich mir selber widerspreche ;)).

Aber ich schreibe schon wieder Romane ...


danke f�rs lesen

Tobias

-- 
Tobias Daur :: daur at gmx.de


php::bar PHP Wiki   -   Listenarchive