Achtung Falle!
Benutzt man persistente Objekte in PHP, die ungefähr so aufgebaut sind, wie hier beschrieben.
class User { public function __construct(){} // save object to session variable public function __destruct() { $_SESSION['user'] = serialize($this); } // factory method public static function factory() { session_start(); if(isset($_SESSION['user']) === TRUE) { return unserialize($_SESSION['user']); } return new User(); } }
In dieser Klasse wird also der Destructor benutzt um das Objekt in die SESSION zu schreiben.
Macht man nun ein header() redirect nachdem man das Objekt instanziiert hat, ist auf der nächsten Seite das Objekt nicht in der SESSION.
Denn der Destructor wird meist am Ende des Scriptes aufgeführt, da ist die Seite im Falle eines redirects aber schon weg.
Also muss man vor header() redirects den Destructor selbst aufrufen.
$U = User::factory(); $U->__destruct(); header('irgendwohin.php');
Ein bißchen krude, wie ich finde.
Mehr als das – kürzlich ist mir so ein Ding gar um die Ohren geflogen, weil irgend ein Attribut innerhalb des Objekts ein c mit Hütchen beinhaltete – Deserialization failed. Wahrscheinlich war der Typ, der sich die Delimiter dafür ausgedacht hat, kein Jugoslawe… Oder was auch immer, php halt :D