Ankündigung

Einklappen
Keine Ankündigung bisher.

objekte und session

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • objekte und session

    Hi,

    ich weiß, dass Thema wurde schon huntertmal besprochen.
    Ich habe aber keine Lösung für mein problem gefunden.
    Ich möchte ein Objekt in einer Session speichern.

    Ich habe dazu dieses Beispiel ausprobiert: http://www.developers-guide.net/foru...ekt-persistenz

    das beispiel funktioniert aber nicht. Wenn ich mir das übergebene Objekt angucke mittels print_r beomme ich : __PHP_Incomplete_Class Object

    das objekt wird nicht korrekt wieder hergestellt.
    Die werte sind noch da, aber die methoden lassen sich nicht mehr benutzen.
    Kann mir jemand sagen, woran das liegen könnte?

    Danke, Crypi
    PostgreSQL Forum:
    www.pg-forum.de

  • #2
    Im zweiten Absatz steht doch eigentlich schon der Klu:
    Die Objekte degenerieren hierbei zu "unvollständigen Klassen", die
    zwar wie eine stdClass alle Eigenschaften behalten haben, aber um jegliche Methoden
    beraubt sind.

    Warum dies geschieht ist schnell erklärt, der Quellcode der Klassen ist zum
    Zeitpunkt des Aufrufs von session_start() nicht verfügbar und PHP ist nicht bekannt, wie das Objekt zu rekonstruieren ist. Die Lösung des Problems ist eigentlich sehr simpel. Die
    Klassen müssen inkludiert werden, bevor session_start() aufgerufen wird.

    Kommentar


    • #3
      ja, aber selbst wenn ich das tue, also das includieren vor dem session_start, oder auch wenn ich die klasse im gleichen skript deklariere klappt es nicht.

      und in dem beispiel tut er das ja auch....
      selbst bei copy&paste funktioniert das beispiel nicht.

      noch einmal ein beispielcode der nicht funktioniert:
      PHP-Code:
      <?php

      class meineKlasse { var $eigenschaft 0; }


      if(
      $_POST[action]=="loeschen"){

      session_destroy();
      }


      session_start();

      if ( ! isset( 
      $_SESSION['objekt'] ) )
      {
          if (!
      is_object($_SESSION['objekt']))
              
      $_SESSION['objekt'] = new meineKlasse();



          echo 
      'Lege Objekt in Session an.' "
      \n"
      ;
          
      $_SESSION['objekt'] = new meineKlasse;
          echo 
      'Eigenschaft: ' $_SESSION['objekt']->eigenschaft "
      \n"
      ;
      }
      else
      {
          echo 
      'Objekt existiert bereits in Session.' "
      \n"
      ;
          echo 
      'Eigenschaft: ' $_SESSION['objekt']->eigenschaft "
      \n"
      ;
      }

      $_SESSION['objekt']->eigenschaft 'blahblahblah';








      //echo $_SESSION['objekt']->eigenschaft;
      print_r($_SESSION['objekt']);



      ?>

        
        
        <form method=POST> 
        
        <input type=submit name=action value=loeschen>
        <input type=submit value=aktualisieren>
        </form>
      PostgreSQL Forum:
      www.pg-forum.de

      Kommentar


      • #4
        sinnfrei.
        PHP-Code:
        if ( ! isset( $_SESSION['objekt'] ) )
        {
            if (!
        is_object($_SESSION['objekt'])) 
        dito:
        PHP-Code:
            if (!is_object($_SESSION['objekt']))
                
        $_SESSION['objekt'] = new meineKlasse();

            echo 
        'Lege Objekt in Session an.' "
        \n"
        ;
            
        $_SESSION['objekt'] = new meineKlasse
        Was passiert denn beim Erstaufruf?
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          Is vielleicht session-autostart gesetzt? Weil dann is klar, dass du die Klassen nicht vorm Session-Start laden kannst ^^
          Nicht jeder Fehler ist ein Bug.

          Kommentar


          • #6
            zugegeben... der kram ist doppelt...
            aber egal. ist beim hin und her wurtschteln so übrig geblieben.


            beim ersten ausführen klappt es wunderbar.
            PostgreSQL Forum:
            www.pg-forum.de

            Kommentar


            • #7
              ok. daran lags. hab das session.start_auto abgeschalted.

              ich versuche das ncoh zu verstehen.
              hat er jetzt versucht, sofort, also ganz zu anfang, das objekt wieder herzustellen, bevor die klasse definiert wurde und hat es deswegen nicht geklappt?
              und erst durch diese änderung wird die session wirklich erst bei session_start() gestartet?


              Danke für eure Mühe!
              Crypi
              PostgreSQL Forum:
              www.pg-forum.de

              Kommentar


              • #8
                Korrekt. Was eventuell auch geklappt hätte, wäre: Session beenden, Klasse laden, Session neu starten.
                Nicht jeder Fehler ist ein Bug.

                Kommentar


                • #9
                  du meinst mit session_destroy() ?

                  aber dadurch wären doch andere daten die in der session gespeichert wurden auch verloren gegangen oder?
                  PostgreSQL Forum:
                  www.pg-forum.de

                  Kommentar


                  • #10
                    Nein und Ja. Die Daten wären dann weg, aber ich meinte session_write_close Das wäre dann interessant, wenn du zB bei einem webspace session.autostart nicht selbst manipulieren kannst.
                    Nicht jeder Fehler ist ein Bug.

                    Kommentar

                    Lädt...
                    X