$userdata ist im Prinzip keine Sessionvariable sondern nur der Inhalt einer Datenbankzeile. D.h. der Inhalt von $userdata überdauert keinen Seitenaufruf.
Wenn du trotzdem ständig auf wechselnde Daten stößt die du für jeden User zwischenspeichern musst dann würde ich das so machen:
- Leg in der Tabelle phpbb_users ein neues Feld an (z.b. dyn_vars) vom Typ Text oder Blob
- Schreib dir eine Funktion, z.b. set_svar($varname, $value) mit der du dieses Feld für den aktuellen User belegst:
Code: Alles auswählen
set_svar($varname ='', $value = '')
{
global $userdata, $db;
if(!is_array($userdata['dyn_vars']))
{
$userdata['dyn_vars'] = unserialize($userdata['dyn_vars']);
}
if(!$varname)
{
return;
}
$userdata['dyn_vars'][$varname] = $value;
$sql = 'UPDATE ' . USERS_TABLE . ' SET dyn_vars = ' . addslashes(serialize($userdata['dyn_vars'])) . ' WHERE user_id = ' . $userdata['user_id'];
if(!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Dynamische Speicherung fehlgeschlagen', '', __LINE__, __FILE__, $sql);
}
}
- Benutzung dann eben durch initialisierung per set_svar(); und anschließenden Zugriff über $userdata['dyn_vars']['variablenname']
- Setzen neuer Variablen über set_svar('variablenname', 'wert'); Du kannst die Werte auch setzen über $userdata['dyn_vars']['variable'] = xxx, musst aber im Anschluss irgendwann auf jeden Fall noch set_svar mit nichtleeren Parametern aufrufen (oder du schreibst die Funktion so um, dass sie bei jedem Aufruf grundsätzlich immer das Array speichert, kann je nach dem wie häufig du das brauchst sinnvoller sein).
Das soll nur eine (nicht mehr ganz so) grobe Anleitung sein. Ich habe das weder getestet noch würde ich ausschließen dass da kleinere Fehler drin sind, aber prinzipiell könntest du das so machen.
Wenn du immer wieder die gleichen Werte hast die du brauchst kannst du natürlich auch durch hinzufügen von Tabellenspalten in der user Tabelle diese direkt ansprechen statt ein Feld als "Mädchen für alles" zu benutzen. Das hätte dann den Vorteil dass du in der Tabelle auch direkt nach dieser Eigenschaft suchen könntest.
Auf Dateiebene ginge das quasi wie bei einem Cache, also per [php:fopen] die Datei öffnen (wobei du z.b. die User_id in den Dateinamen schreibst um die User voneinander zu unterscheiden), dann per [php:fwrite] oder [php:fprintf] was reinschreiben oder [php:fread] rauslesen und per [php:fclose] wieder schließen wobei du das ganze am besten in ein paar Funktionen oder eine Klasse verpackst, damit du das nicht überall wo du es brauchst von Hand machen musst.