Karl K.: __PHP_Incomplete_Class

Hallo Forum,

mein Login habe ich mittels .htaccess realisiert. Nach korrekter
Eingabe komme ich auf die index.php im Root-Verzeichnis. In dieser
überprüfe ich anhand $_SERVER['PHP_AUTH_USER'], ob der User auch
in der DB registriert ist. Wenn ja, dann lege ich eine neue
Instanz der Klasse $user an. Und diese Instanz möchte ich gerne
in meiner Session hinterlegen, damit mir die Eigenschaften/Einstellungen
des Users anwendungsweit zu Verfügung stehen, ohne stets eine neue
DB-Abfrage starten zu müssen. So - und hierbei kommt dann bei mir
o.g. Fehlermeldung: __PHP_Incomplete_Class. Es ist keine direkte 'Fehler'-
Meldung, sondern der Wert wurde in der Session hinterlegt - da, wo
eingentlich meine User-Object stehen sollte:
Array
(
    [user] => __PHP_Incomplete_Class Object
        (
            [__PHP_Incomplete_Class_Name] => user
            [usr_id] => 1
            [email] => admin@xyz.com
            [prename] => Hans
            [surname] => Beddeker
            [nickname] => embededhansi
            [show_menu] => 0
        )

)

Nach längerem Stöbern habe ich diesbezüglich ein paar comments
gelesen, dass das wohl ein Bug sei. Dem möchte ich aber keinen
Glauben schenken. Dann habe ich von 4.3.3 auf 4.3.10 upgedatet -
doch auch hier liegt dieses Problem vor. Die 5er kann ich nicht
nehmen, da mein Provider auch nur mit der 4.3.10 fährt..

Zudem habe ich gelesen, dass wohl das eigentliche Problem hierbei
ist, dass das User-Object zu dem Zeitpunkt, wenn es in die Session
geschrieben wird, noch nicht komplett initialisiert wurde. Und daher
nur 'halb' in der Session hinterlegt wird. Daher habe ich etliche
'Reihenfolgen' ausprobiert.. doch bin einfach nicht an diesem
Problem vorbeigekommen.

Nun, hat von Euch einer hierfür einbe Lösung parat bzw. dieses
Problem schonmal gehabt und/oder behoben?

Besten Dank für Bemühungen
Karl K.

----code---

$saveTmpUser=false;

if($_REQUEST['isFirstCall']!="false")
{
  $usr = createUser();
  $_REQUEST['isFirstCall']="false";
  $saveTmpUser=true;
}

session_start();

if($saveTmpUser)
  $_SESSION['user'] = $usr;

if(!$_SESSION['user']||$_SESSION['user']==null)
goDie();

  1. Nun, hat von Euch einer hierfür einbe Lösung parat bzw. dieses
    Problem schonmal gehabt und/oder behoben?

    Noch nicht, aber mir fällt da spontan ein:

    • die Klassendefinition wurde vor dem session_start() geladen?
    • session.auto_start ist ausgeschaltet?
      • die Klassendefinition wurde vor dem session_start() geladen?

      Ja, so soll es lt. Quellen sein.

      • session.auto_start ist ausgeschaltet?

      Ja, ist es. Ist das nicht richtig so

      Danke sehr..
      Karl K.

        • die Klassendefinition wurde vor dem session_start() geladen?
          Ja, so soll es lt. Quellen sein.
        • session.auto_start ist ausgeschaltet?
          Ja, ist es. Ist das nicht richtig so

        Doch doch, sonst würde die Session sofort starten.

        Hmmm... dann weiß ich auch nicht was bei dir schief läuft.

        Hast du alle Warnungen/Notizen eingeschaltet?   error_reporting(E_ALL);
        mach doch mal vor deinem session_start() ein var_dump(session_id());

        Ich konnte den Fehler mittlerweile reproduzieren:

        1. Teil

        • Klasse deklarieren
        • Instanz erzeugen
        • Session starten
        • Instanz in Session schreiben

        2. Teil

        • Klasse deklarieren
        • Session starten
        • var_dump($_SESSION['instanz'])
          -> Alles bestens.

        3. Teil

        • Session starten
        • var_dump($_SESSION['instanz'])
          -> object(__PHP_Incomplete_Class) ...