Eigene Session-Klasse
Willi
- php
Hallo,
Ich habe seit einiger Zeit an einem eigenen CMS, welches auf dem modernsten Stand sein soll: PHP5, Objektorientierung, Ajax-Funktionen etc.
Bisher bin ich noch bei den "Grundlagen", habe also bisher neben einigen Gedanken die Datenbank-, Template-, Einstellungs- und Sessionklasse sowie die Datenbankstruktur erstellt.
Bei den letzen beiden bin ich mir allerdings nicht ganz sicher:
* Braucht es eine eigene Klasse zur Sicherung und zum Auslesen von Einstellungen?
* Braucht es eine eigene Session-Klasse oder soll ich auf die Session-Funktionalitäten von PHP zurückgreifen?
Ich habe mich für eine eigene Klasse entschieden, damit ich genau steuern und kontrollieren kann, wie das ganze abläuft und ich nicht nachher URL-Parameter angehängt habe, wo ich sie nicht will etc. Um die Session-Daten zu speichern, benutze ich eine eigene Tabelle in der Datenbank, welche aus folgenden Spalten besteht: sessionid (32-stelliger String), cookies (ja/nein), cookieid, lastaction, firstaction (jeweils UNIX-Timestamps), userid sowie „data“. In dieser „data“-Spalte speichere ich nun alle Daten, die nicht in die anderen Spalten passen und benutze 2 Methoden aus der Klasse „Session“ um Daten aus einem Array in das Format [Key1]=[Value1]||[Key2]=[Value2]|| … zu bringen bzw. zurück in ein Array zu konvertieren. Das sieht im Moment folgendermaßen aus:
public function getData($key){
if($key == 'userid') return $this->userid;
$array = explode("||", $this->db->selectone("SELECT data FROM {$this->db->pre}onlineusers WHERE sid = '{$this->sid}'", 'data'));
foreach($array as $value){
$split = explode("=", $value);
$array2[$split[0]] = $split[1];
}
if($key == 'all') return $array2;
return $array2[$key];
}
public function setData($key, $value){
if($key == 'userid') $this->db->query("UPDATE {$this->db->pre}onlineusers SET userid = '$value'");
else {
$array = $this->getData('all');
$array[$key] = $value;
$array = mysql_real_escape_string($this->serialize($array));
$this->db->query("UPDATE {$this->db->pre}onlineusers SET data = '$array'");
}
}
private function serialize($array){
foreach($array as $key => $value){
$str .= $key . '=' . $value . '||';
}
return substr($str, 0, -2);
}
Habt ihr Verbesserungsvorschläge zu diesem Konzept bzw. zu den Methoden?
Schöne Grüße,
Willi