Ankündigung

Einklappen
Keine Ankündigung bisher.

Session-Variablen plötzlich weg

Einklappen

Neue Werbung 2019

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

  • Session-Variablen plötzlich weg

    Ich habe folgendes Problem:
    Ich habe eine index.php, auf der ich via PHP verschiedene HTML-Elemente erstelle, z.B. beim aufrufen der Seite das Login und nach dem Einloggen die Elemente der Hauptseite.
    Von der index.php rufe ich die Funktion "getRequest()" vom Controller auf. Dann wird je nach vorhandenen POST-Variablen eine andere Funktion aufgerufen.
    PHP-Code:
    class DBAdmin_Controller{

        public 
    $model null;
        public 
    $gui null;

        function 
    getRequest() {
            if (
    $this->gui == null) {
                require_once 
    'DBAdmin_GUI.php';
                
    $this->gui = new DBAdmin_GUI();
                
    // Instanz des Controllers an die View übergeben
                
    $this->gui->setController($this);
            }    

            if (isset(
    $_POST['username'])) {
                
    $this->loginUser(); // -> in dieser Funktion werden die Session-Variablen gesetzt           
            
    } else if (isset($_POST['delete'])) {
                
    $this->deleteDatabase($_POST['selectedDB']); // --> in dieser Funktion rufe ich die besagten Session-Variablen ab
            
    } else if (isset($_SESSION['id'])) {
                
    $this->gui->renderGUI('main');
            } else {
                
    $this->gui->renderGUI('login');
            }
        }

    Beim Login speichere ich zwei Variablen in die Session ('root' und 'userShort'). Ich kann danach auch darauf zugreifen, aber nach dem Abschicken des Formulars im Hauptbereich sind sie plötzlich weg. Ich nahm an, dass das Problem ist, dass ich beim neuladen der Seite eine neue Instanz des Controllers erstelle.
    Das wollte ich damit lösen, dass ich die Instanz in die Session speichere:
    PHP-Code:
    <?php
        
    require_once 'php/DBAdmin_Controller.php';
        
    session_start();  
        if (isset(
    $_SESSION['controller'])) {
            
    $cont unserialize($_SESSION['controller']);
            
    $cont->getRequest();
        } else {                                                                  
            
    $cont = new DBAdmin_Controller();
            
    $_SESSION['controller'] = serialize($cont);
            
    $cont->getRequest();
        }
    ?>
    Dieser Code wird in index.php bei jedem Laden der seite ausgeführt.
    Meine beiden Session-Variablen verschwinden aber dennoch.
    Was mache ich falsch?

  • #2
    Zitat von MrChangelog Beitrag anzeigen
    Was mache ich falsch?
    Du debugst nicht!

    Kommentar


    • #3
      Ich nahm an, dass das Problem ist, dass ich beim neuladen der Seite eine neue Instanz des Controllers erstelle.
      Das wollte ich damit lösen, dass ich die Instanz in die Session speichere:
      Das dürfte überhaupt keinen Einfluss haben.

      Wichtig ist das die Funktion `session_start()` ausgeführt wird bevor du mit der session interagierst.

      Du kannst also dein `index.php` wieder vereinfachen.

      PHP-Code:
      <?php

      require_once 'php/DBAdmin_Controller.php';

      session_start();  

      (new 
      DBAdmin_Controller())->getRequest();
      Davon abgesehen müsste dein Schnipsel eigentlich funktionieren, zumindest auf basis von dem was du uns hier zeigst und wenn ich es richtig verstehe.

      Somit ist die frage was du in deinem restlichen code mit der Session so treibst.
      • Machst du vielleicht irgendwo einen call zu `session_unset` oder `session_destroy()`?
      • Bist du dir sicher das du die Werte nicht irgendwo überschreibst?
      • Beobachte doch mal das `PHPSESSID` cookie (bei default config) ob es gesetzt wird, ob es sich ändert etc.
      • Bei dem Punkt bin ich mir nicht sicher: überprüfe das kein output in vor `session_start` verschickt wird. Wenn php nicht den gesamten output vorher in einen buffer schreibt dürfte es sonst zu spät sein einen Header mit cookie Informationen zu setzten.
      Mehr fällt mir mit den aktuellen Informationen sonst nicht ein, hangel dich step by step durch den code durch bis du deinen Fehler findest.

      PS: Ich will doch schwer hoffen das Funktionen wie `deleteDatabase` ihren Input ganz genau validieren

      Kommentar


      • #4
        Mittlerweile sieht der Code so aus:
        PHP-Code:
        <?php
            
        require_once 'php/DBAdmin_Controller.php';
            
        session_start();                                                                    
            
        $cont = new DBAdmin_Controller();
            
        $cont->getRequest();
        ?>
        Diesen Code hate ich ursprünglich schon einmal, aber dann funktionierte es eben nicht.
        Nun funktioniert es, aber warum (bzw. warum es vorher nicht ging) weiss ich auch nicht so genau

        Zitat von mario Beitrag anzeigen

        PS: Ich will doch schwer hoffen das Funktionen wie `deleteDatabase` ihren Input ganz genau validieren
        Tun sie!

        Kommentar

        Lädt...
        X