Sessions in Klassen

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

  • Sessions in Klassen

    Hi,
    ich habe folgendes Problem. Ich will in einer Klasse einen Sessionwert setzen und das funzt nicht. Ich hab es mit session_register probiert und mit $_SESSION. Nichts läuft, ausser ich schneide den Quellcode aus der Klasse aus und führe in ausserhalb der Klasse aus. Dann funktioniert alles prima.

    Es funzt in der klasse nur, wenn ich ausserhalb die Variablen registriere und dann diese Variablennamen in der Klassenfunktion mit global definiere, dann schreibt ers in die Session. Das ist aber ne scheiss Lösung find ich...

    Kann mir vielleicht jemand sagen, was ich da falsch mache???

    function test() {
    global $_SESSION;

    $_SESSION[status] = "true";
    }

    function test() {
    $status = "true"

    session_register("status");
    }

    Beides haut nicht hin. Beim ersten macht er gar nichts und beim zweiten wird die variable registriert, hat aber keinen wert.

  • #2
    Re: Sessions in Klassen

    PHP-Code:
    function test() {
    //global $_SESSION; 
    $_SESSION['status'] = "true";
    }

    // ausserhalb der klasse
    print_r($_SESSION); 
    ^^ ausgabe?
    Kissolino.com

    Kommentar


    • #3
      Re: Sessions in Klassen

      Original geschrieben von nepi
      global $_SESSION;
      sowas ist gequirlte schei**e. $_SESSION ist bereits superglobal.
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Mhh, ich hab das so wie bei dir mit den anführungsstrichen gemacht und anschliessend mit print_r ausgegeben:

        Array ( [status] => true [uid] => 4 )

        In die Session selbst hat er es aber trotzdem nicht geschrieben...

        Kommentar


        • #5
          Original geschrieben von nepi
          Mhh, ich hab das so wie bei dir mit den anführungsstrichen gemacht und anschliessend mit print_r ausgegeben:
          Array ( [status] => true [uid] => 4 )
          print_r($_SESSION); gibt das aus ^^ ?

          In die Session selbst hat er es aber trotzdem nicht geschrieben...
          hallo? ... bin ich jetzt verwackelt oder du?
          Kissolino.com

          Kommentar


          • #6
            Das ist ja das komische:

            print_r($_SESSION);

            Ergebnis:

            Array ( [status] => true [uid] => )

            Und die Session auf der Platte bleibt 0 Byte

            Ich versteh die Welt nicht mehr...

            Kommentar


            • #7
              guckst du auch in der richtigen datei ?
              PHP-Code:
              echo realpath(ini_get('session_save_path')) . '/sess_' session_id(); 
              mfg,
              [color=#0080c0]Coragon[/color]

              Kommentar


              • #8
                Ja, habe ne typo3 installation gemacht und alle sessions landen dort bei c:\apache\tmp\

                Ich hab noch ein wenig rumgetestet und das mit $_SESSION["wert"] klappt bei mir generell nicht. Weiss aber net warum...

                Hab das jetzt so gemacht:

                function () {
                global $test;

                $test = "wert";
                session_register("test");
                }

                Das ist der einzige Weg bei mir werte aus objekten heraus in sessions zu schreiben. Das global ist dafür zwingend notwendig. Die anderen Varianten hauen nicht hin. Bin echt überfragt!

                Kommentar


                • #9
                  Original geschrieben von nepi
                  Mhh, ich hab das so wie bei dir mit den anführungsstrichen gemacht und anschliessend mit print_r ausgegeben:

                  Array ( [status] => true [uid] => 4 )

                  In die Session selbst hat er es aber trotzdem nicht geschrieben...
                  Also wurde doch etwas in die Session geschrieben. Du nimmst die falsche Datei anscheinend.
                  print_r() gibt ja rekursiv das gesamte Session-Array aus - alles was da raus kommt an Werten kommt aus einer temporaeren Session-Datei. Es muss also irgendwo stehen!

                  Und wenn diese Ausgabe von print_r(); kommt funktioniert das Session-Handling auch korrekt und wie ein Vorgaenger bereits sagte: $_SESSION ist eine Superglobale, sie wurde extra geschaffen um Probleme, wie du sie mit deiner Klasse haettest zu umgehen.

                  Warum machst du dir sorgen, ob auch wirklich etwas auf die Platte geschrieben wird? Solange $_SESSION die korrekten Werte hat und in einem anderen Skript, das die Session wieder aufnimmt die Werte immer noch da sind hast du doch was du willst.

                  Bedenke, dass Sessions standardmaeßig nur solange laufen, wie der Browser nicht geschlossen wird - sie sind nur dafuer gedacht beim Surfen Werte zu behalten - schließt du den Browser - hoerst du auf zu surfen, wird die Session terminiert. Fuer laengeren Datenerhalt gibt es Cookies - standardmaeßig verwendet das Sessionhandling auch Cookies fuer die Wertespeicherung - auch diese haben den expire-Parameter auf 0, das heißt der Browser loescht sie beim Schließen des Programmes.

                  Kommentar


                  • #10
                    Ich hab das ganze mal getestet. Als erstes hab ich meine Platte nach anderen Sessions durchsucht, nischt. Session save path ist c:\apache\tmp\ und da stehen auch alle drin.

                    Dann hab ich zu der lösung, die ich oben gepostet hab noch ne zeile mit reingenommen:

                    $_SESSION['test'] = 1;
                    print_r($_SESSION);

                    Dann gibt er mir auch nur test aus. Die anderen Variablen, die ich vorher mit session_register und global registriert hab und die in der session bereits stehen, werden nicht angezeigt. Führe ich dann print_r im anderen gleich darauffolgenden script aus, zeigt er mir die variablen in der session an und test ist verschwunden.

                    PS: Ich progge nicht auf nem Gameboy ;o)

                    Kommentar


                    • #11
                      du hast schon immer schön brav session_start() verwendet?
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Mit der Superglobalen $_SESSION brauchst du kein session_register() mehr. Du erstellst einfach Werte in diesem Array, PHP packt die dann in die Sessiondatei bzw. Cookie.

                        Dupliziere doch einfach das erste Skript in welchen du eine Session startest, $_SESSION["test"] einen Wert gibst und dann anzeigst. In dem duplizierten Skript loeschst du die Zeile, in der $_SESSION["test"] seinen Wert bekommst raus, startest also nur ne Session und gibts ihren Inhalt aus - die Ausgabe muss beiden Skripten gleich sein.

                        Kommentar


                        • #13
                          Ok,
                          hab zwei scripte gemacht.

                          Erstes script:

                          <?PHP
                          session_start();

                          $_SESSION["test"] = 1;
                          print (session_id()."<BR>");
                          print_r($_SESSION);
                          ?>

                          AUSGABE:

                          d0c6d7a265e8180fda80c6081b084f2b
                          Array ( [test] => 1 )

                          -------------------------------------------------------

                          Zweites Script:

                          <?PHP
                          session_start();

                          //$_SESSION["test"] = 1;
                          print (session_id()."<BR>");
                          print_r($_SESSION);
                          ?>

                          AUSGABE:

                          d0c6d7a265e8180fda80c6081b084f2b
                          Array ( )

                          Das tmp verzeichnis ist leer! Session wird beim ausführen erstellt steht aber nischt drin. Das ist aber die session von diesem script, da sie ja frisch erstellt wurde!!! Danach gehe ich auf Zurück und führe das zweite script aus und was bei rauskommt siehst ja, da ist nischt.

                          Hier mal ein kleiner auszug aus der phpinfo():

                          PHP Version 4.1.2
                          session
                          Session Support: enabled

                          Directive Local Value Master Value
                          session.auto_start Off Off
                          session.cache_expire 180 180
                          session.cache_limiter nocache nocache
                          session.cookie_domain no value no value
                          session.cookie_lifetime 0 0
                          session.cookie_path / /
                          session.cookie_secure Off Off
                          session.entropy_file no value no value
                          session.entropy_length 0 0
                          session.gc_maxlifetime 1440 1440
                          session.gc_probability 1 1
                          session.name PHPSESSID PHPSESSID
                          session.referer_check no value no value
                          session.save_handler files files
                          session.save_path c:\apache\tmp c:\apache\tmp
                          session.serialize_handler php php
                          session.use_cookies On On

                          Kommentar


                          • #14
                            Hallo,
                            dasselbe Problem ha(b/tt)e ich auch jetzt gerade eben.
                            Innerhalb der Klasse lieferte dies:
                            PHP-Code:
                                                echo "!$userid";
                                                
                            session_register('userid');
                                                echo 
                            "?".$_SESSION['userid']; 
                            !22?

                            Es liegt scheinbar an der Lokalität der $userid-Variable.
                            ein global $userid; vor der Verwendung hat Wunder getan.

                            MfG Eisflamme

                            Kommentar


                            • #15
                              Siehst, mein ich doch. Mit global und session_register ist irgendwie die einzige methode, um in klassen irgendwas zu registrieren. Und $_SESSION klappt bei mir generell nicht...

                              Ich werd noch wahnsinnig hier!

                              Kommentar

                              Lädt...
                              X