Großer SESSION Bug in Verbindung mit Objekten!?

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von michanismus, 27.04.2005.

  1. michanismus

    michanismus Thread Starter MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Hallo,

    wie schon der Titel sagt bin ich auf ein größeres Problem gestoßen.

    Die Vorgeschichte: Ich möchte bei meinem derzeitigen Projekt mittels
    mod_rewrite von Apache ein PHP Skript vor jedem anderen ausführen
    lassen. Aus welchem Grund? Ich möchte einfach das generell die Session
    gestartet wird und grundlegende Konstanten und Objekte laden lassen.

    Da liegt das Problem, eben bei den Objekten.

    hier erstmal die Quelltexte (alles einfach gehalten):

    .htaccess
    Code:
    RewriteEngine On
    RewriteRule ^(.*)(\.php|\.php4|\.php5|\.php3)$ /Volumes/Daten/Work/XXX/lib/config/rewrite.php
    
    rewrite.php
    PHP:
    ini_set('session.bug_compat_warn'0);
    session_start();

    define'SERVER_ROOT''/Volumes/Daten/Work' );

    $request $_SERVER['REDIRECT_URL'];
    include (
    SERVER_ROOT.$request);
    test.php
    PHP:
    <?
    //session_start();
    ?>
    <pre>
    <? print_r($_SESSION); ?>
    </pre>
    <?php

    class myObject {

      var 
    $num=0;

      function 
    show() {
       echo 
    $this->num;
      }

      function 
    increment() {
       
    $this->num++;
      }

      function 
    __sleep() {
       return 
    array_keysget_class_vars('myObject') );
      }

      function 
    __wakeup() {}
    }

    if ( 
    session_is_registered('lutscha') ) {
     
    $lutscha =& $_SESSION['lutscha'];
     
    $lutscha->show();
     
    $lutscha->increment();
    } else {
      
    $lutscha =& new myObject();
      
    session_register('lutscha');
    }
    ?>
    Ich bekomme immer folgenden Fehler:

    Das komische ist, wenn ich die Session in dem Skript "test.php" (aktuell
    auskommentiert) starte, und es in der Datei "rewrite.php" auskommentiere,
    funktioniert alles wunderbar.
    Die Session aber wird trotzdem vor dem betreffendem Objekt gestartet,
    jedoch ohne Probleme!
    Im Prinzip also das Selbe, bis auf unterschiedliche Dateien.
    Aber genau das ist es ja, das ich die Session IMMER in "rewrite.php" starten
    will, und auch während der Laufzeit, um diese optimieren zu können,
    Objekte mittels include einbinden will und ggf. in der Session speichern.

    Ich hoffe das Ganze war verständlich erklärt. Ich hoffe ihr habt da bereits
    Erfahrungen gesammelt, bzw. habt Lust selbst etwas herauszufinden :)

    Gruß,
    Michanismus


    EDIT:
    Mit "normalen" Variablen die in $_SESSION geschrieben werden funktionierts
    bestens.

    Beispiel:
    PHP:
    if ( session_is_registered('lolli') ) {
     
    $_SESSION['lolli']++;
     echo 
    $_SESSION['lolli'];
    } else {
     
    $lolli 1;
     echo 
    $lolli;
     
    session_register('lolli');
    }
     
    Zuletzt bearbeitet: 27.04.2005
  2. Pingu

    Pingu MacUser Mitglied

    Beiträge:
    4.894
    Zustimmungen:
    341
    MacUser seit:
    04.08.2003
    Hast Du auch einmal einen Blick ins Manual geworfen?
    Außerdem steht es bereits in der Fehlermeldung und auch im Manual
    Objekte und Klassen müssen bevor die Session gestartet wird, definiert werden.

    Pingu
     
  3. michanismus

    michanismus Thread Starter MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Ja, habe ich. Und wie du nicht gesehen hast arbeite ich mit
    "session_is_registered". Des Weiteren wird der Name und das Objekt auch
    in der Session gespeichert, nur leider ist es nach dem ersten Aufruf nicht über
    das Objekt ansprechbar, da der Name flöten gegangen ist.

    print_r($_SESSION) liefert:
    Hmm, komisch finde ich dann aber, dass wenn ich die Session in der
    test.php starte und Klasse auch in dem Fall danach definiert wird,
    alles funktioniert. ;)
     
  4. Pingu

    Pingu MacUser Mitglied

    Beiträge:
    4.894
    Zustimmungen:
    341
    MacUser seit:
    04.08.2003
    Nur weil es manchmal funktioniert wenn man es anders macht, heißt nicht, daß es ein Fehler ist, wenn es mal nicht funktioniert.

    Denn die Dokumentation ist in diesem Punkt mehr als eindeutig (der Hinweis steht sogar in einer großen Achtung-Box). Die Definition muß vor der Registrierung der Sesssion erfolgen.
    Also:
    1. class ... { }
    2. session_start()
    3. Klasse benutzen

    Wie gesagt, wenn Du es anders machst als es in der Dokumentation beschrieben ist, brauchts Du Dich auch nicht über komische Seiteneffekte wundern.

    Pingu
     
  5. michanismus

    michanismus Thread Starter MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Dann werde ich das wohl so benutzen müssen, auch wenn es ein wenig
    verwirrend ist. :/

    Hat jemand Erfahrungen mit der .htacces und meinem Plan?
    Gibt es da evtl. Konflikte oder Probleme. Wäre gut zu wissen, nicht das ich
    anfange wie ein Wilder zu schreiben und nach 10000 Zeilen Code darf ich alles
    umbauen.

    Viele Grüße,
    Michanismus
     
  6. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    Ergänzend empfielt sich diese Lektüre (insb. oberster Abschnitt).
     
  7. michanismus

    michanismus Thread Starter MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Das kannst du dir auch klemmen, zumindest wenn du nix zum Beitrag leisten kannst. Egal ob du nu Moderator bist oder nicht. Solltest du nen (evtl.)
    intelligenten Tip haben, kannst das auch per PM machen.

    P.S. Hast du denn mal meine Skripte ausprobiert? Vielleicht verstehst du dann
    meine Vermutung.
     
    Zuletzt bearbeitet: 27.04.2005
  8. Nogger

    Nogger MacUser Mitglied

    Beiträge:
    367
    Zustimmungen:
    0
    MacUser seit:
    03.08.2004
    Es steht in der Datei danach. Aber das ist egal. Die PHP Datei wird zuerst komplett geparst, und erst dann wird die Ausführung gestartet,

    Das siehst du daran, daß wenn ein Parsing Fehler auftritt, nicht eine Zeile ausgeführt wird, egal wo der Fehler ist.

    Oder schau dir das an:

    Code:
    <?php
    
    print hw();
    
    function hw() {
      return "Hallo Welt";
    }
    
    ?>
    
    Da steht der Funktionsaufruf auch früher als die Definition.
     
  9. michanismus

    michanismus Thread Starter MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Okay, nur leider scheint der Include Befehl dieser Definition nicht zu
    folgen :(
    Oder?
     
  10. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    MacUser seit:
    24.09.2003
    Wer Großer SESSION Bug in Verbindung mit Objekten!? als Titel wählt, sollte IMHO einen solchen Link auch verkraften.

    Klar hätte ich Dir das auch per PN schicken können.
    Auf der anderen Seite finde ich die "Smart Questions" so gut, dass ich es sinnvoll finde, wenn andere das auch kennenlernen und lesen.

    Ich wollte Dich damit aber nicht persönlich angreifen.
    Falls Du es so aufgefasst hast, tut mir das Leid, und ich entschuldige mich hiermit bei Dir.
     
Die Seite wird geladen...
Ähnliche Themen - Großer SESSION Bug
  1. 2nd
    Antworten:
    6
    Aufrufe:
    1.554
  2. Tundra
    Antworten:
    8
    Aufrufe:
    1.334
    dmssmd
    09.02.2009
  3. oconner
    Antworten:
    1
    Aufrufe:
    555
  4. oconner
    Antworten:
    3
    Aufrufe:
    440
    oconner
    01.07.2006
  5. maceis
    Antworten:
    16
    Aufrufe:
    1.518
    maceis
    31.03.2006