[TYPO3-UG Dutch] Record locking

Rudy Gnodde rgn at windinternet.nl
Thu Sep 11 09:50:33 CEST 2008


Hallo H.,

H. Hahn wrote:
> De klant wil met meer dan een redacteur kunnen werken. Het gevaar 
> bestaat dus dat redacteur A en redacteur B per ongeluk tegelijk aan 
> dezelfde pagina gaan werken. Er is dus een vorm van record locking 
> nodig. Daar heb ik alleen geen enkele ervaring mee.
> 
> Nu lijkt me een simpele record locking niet zo moeilijk te maken. Gewoon 
> een vlag (bijv. een extra veld in de databasetabel) die aangeeft dat er 
> iemend bezig is met die alinea (ik heb een record per alinea, dus 
> meerdere records per pagina). Als de betreffende redacteur de pagina 
> sluit, wordt de vlag gereset.
> 
> Maar als nu intussen door welke oorzaak dan ook de verbinding tussen 
> browser en server wegvalt, zou die vlag nooit meer gereset worden en het 
> betreffende record dus niet meer wijzigbaar zijn. Een gewone timeout 
> lijkt me ook bezwaarlijk; iemand kan immers net even een kopje koffie 
> aan het drinken zijn of zo, waardoor die vlag mogelijk te vroeg gereset 
> wordt.
> Ook kan ik die vlag in plaats van de waarde "1" (= "bezig") en "0" (= 
> "vrij") de waarde van de session_id resp. "leeg" geven. Bij elke poging 
> om iets te wijzigen of op te slaan kan ik de session_id vergelijken met 
> die in be browser (cookie fe_typo_user). Maar dat levert nog geen 
> criterium op voor het resetten van de vlag.
> 
> Weet iemand bruikbare oplossing voor het veilig (dwz. niet te vroeg en 
> niet te laat) resetten van zo'n vlag? Graag oplossingen in PHP en/of 
> MySQL, maar niet in Typoscript (mijn FE-editing is niet als "extensie" 
> uitgevoerd en kan dus niet met TS overweg).
> Bij voorbaat dank.
> H. Hahn

De beste manier voor een record locking meganisme is om met een 
datum/tijd en een timeout te werken. Als iemand een record begint te 
bewerken zet je de datum/tijd in een databaseveld. Na bv 5 minuten geen 
activiteit is het record weer vrij.

Nu geef je zelf al aan dat dit niet wenselijk is, want wat als er iemand 
langer van 5 minuten weg is om koffie te halen. Dat probleem kun je 
oplossen met een heartbeat. Je moet dan via Ajax of een hidden iframe of 
iets dergelijks regelmatig automatisch een aanvraag naar de server doen 
waardoor het datum/tijd veld wordt geupdate. Als je de timeout op 5 
minuten hebt staan is een heartbeat van eens in de minuut meer dan genoeg.

Met vriendelijke groet,

Rudy Gnodde
WIND Internet
http://www.windinternet.nl


More information about the TYPO3-UG-dutch mailing list