Session Content: Race condition gehoben
authorSven Schöling <sven.schoeling@opendynamic.de>
Wed, 17 Apr 2019 12:30:30 +0000 (14:30 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 20 May 2019 13:51:32 +0000 (15:51 +0200)
commit9b294beca7043c0fa5ae9c57d5766ce4e0d5aa65
tree94b9bedc59663b9d72e1fa83e0973363d85b518e
parent7749e0e61e5d431a59e33cf497addf9ad682b8af
Session Content: Race condition gehoben

Der ursprüngliche Mechanismus hat einfach nur alle Session Variablen
gespeichert und beim Session restore wieder geladen. Es hat sich aber
gezeigt, dass große Daten in der Session Requests deutlich langsamer
machen, also wurde das Flag auto_restore eingeführt. Session Werte, die
nicht automatisch benötigt werden, sollten dann nur bei Bedarf geladen
werden.

Um zu wissen welche Werte existieren wurden aber zum Start des
Requests einmal alle Werte aus der Sessiontabelle geholt, und am Ende
dieser Stand auch wieder hergestellt.

Unter ajax load kann es aber passieren, dass in der Zeit andere Requests
schon Werte eingepflegt haben die dabei gelöscht werden. Das führt dann
zu zufälligen Sessionabbrüchen oder Requestfehlern.

Jetzt werden am Anfang nur und ausschließlich die Daten geladen die auch
auto_restore sind, die dann auch gleich gelöscht werden. nur die Daten
die modifiziert werden, werden am Ende des Requests zurückgespeichert.

Es wäre toll gewesen dafür ein UPSERT zu nehmen, aber das scheitert
daran, dass das ein DB Upgrade auf auth braucht.
SL/Auth.pm
SL/Auth/SessionValue.pm