Sessionhandling

Seit der Version 2.0 ist das Sessionhandling überarbeitet worden. Es gibt nun eine Session-Klasse (abgeleitet von TableAccess) von der bei jedem Scriptaufruf ein globales Objekt $gCurrentSession angelegt wird.

Ein wichtiger Unterschied zum bisherigen Handling ist, dass nun jeder Besucher auch ein Sessioneintrag in der Session-Tabelle bekommt. Außerdem kann nun auch ein Benutzer mehrmals in der Sessiontabelle eingetragen werden, was dazu führt, dass man sich mehrmals auf unterschiedlichen System oder Browsern einloggen kann.

Die PHP-Session wird in der common.php erstellt und erhält als Session-ID entweder die aus dem vorhandenen Cookie oder im anderen Fall die PHP-Session-ID.

Nun wird erst einmal geschaut, ob diese Session schon in der Tabelle existiert. Existiert diese und ist einer usr_id zugeordnet, so ist das Login gültig und die Variable $gValidLogin wird gesetzt. Diese Variable hieß in den vorherigen Versionen $gSessionValid. Die dieser Name jetzt aber zu Verwirrung führen würde (jeder Besucher hat jetzt eine gültige Session), hab ich sie umbenannt.

Existierte die Session noch nicht, so wird sie angelegt, $gValidLogin bleibt aber auf false. Erst nach einem gültigen Login wird dieser Session dann ein User zugeordnet und die Variable auf true gesetzt.

Neu hinzugekommen ist in der Version 2.0 auch die Spalte ses_renew. Über diese Spalte kann man das Neueinlesen von $gCurrentOrganization und $gCurrentUser steuern. Diese werden in der Regel pro User nur einmal eingelesen und bleiben dann in der Session erhalten. Probleme gibt es wenn jemand sehr lange Online bleibt und zur gleichen Zeit ein anderer Admin-User z.B. die Systemeinstellungen oder die Profilfelder ändert. Dies wirkte sich bisher nicht auf alle bereits angemeldeten User aus. Mit Hilfe der Methoden $gCurrentSession→renewOrganizationObject() und $gCurrentSession→renewUserObject() kann man das neue Einlesen bei allen Usern erzwingen.

  • de/entwickler/sessionhandling.txt
  • Last modified: 2012/03/14 14:45
  • by fasse