Simon: Problem mit session_start()

Hi,

Ich habe eine Funktion mit der ich Daten aus einer Session auslese.

Jetzt bekomm ich folgende Fehlermeldung:
Notice: A session had already been started - ignoring session_start()

Dann hab ich das session_start() weggenommen und jetzt bekomm ich das:
Notice: Undefined variable: _SESSION

mach ich das was falsch?

MfG
Simon

  1. Ich habe eine Funktion mit der ich Daten aus einer Session auslese.

    zeig mal deine Funktion her

    lg

    1. zeig mal deine Funktion her

      Im Prinzip ganz einfach:

      function getUserID() {  
        session_start();  
        $UserId = $_SESSION['UserId'];  
        return $UserId;  
      }
      

      MfG
      Simon

      1. Moin!

        zeig mal deine Funktion her

        Im Prinzip ganz einfach:

        function getUserID() {

        session_start();
          $UserId = $_SESSION['UserId'];
          return $UserId;
        }

          
        Da wirst du wohl zweimal diese Funktion aufgerufen haben. Ist ja auch nicht abwegig. Von der etwas sinnlosen technischen Strategie, eine Funktion zu schreiben, die mit viel Variablenkopieren einen ohnehin global verfügbaren Wert aus $\_SESSION besorgt, mal abgesehen.  
          
        session\_start() gehört nicht in eine Funktion, sondern an den Anfang jedes Skriptes. Oder an den Anfang des auf jeder Seite includierten Skriptes mit den globalen Definitionen von allem möglichen (gerne auch Bootstrap genannt).  
          
        Was bleibt also übrig, wenn du alle Ratschläge umsetzt?  
          
        session\_start() fliegt raus.  
        Variablen will man auch nicht kopieren.  
          
        ~~~php
        function getUserID() {  
          return $_SESSION['UserId'];  
        }
        

        Ziemlich kurz. Kann man so machen. Würde ICH persönlich SO aber in keinem Fall machen, nicht mal als Getter-Methode in einem Objekt. Da wäre $_SESSION in den Konstruktor als Parameter übergeben und in eine als protected definierte Eigenschaft kopiert worden, und der Getter-Zugriff erfolgt auf diese Eigenschaft.

        Und wenn du gar keinen objektorientierten Ansatz verfolgst, dann wäre der Direktzugriff auf $_SESSION['UserId'] vermutlich auch schöner.

        Jetzt diskutieren wir noch den Unterschied zwischen Array-Indexnamen und gleichlautendem Funktionnamen: Einmal heißt es "UserId" (kleines D), einmal heißt es "UserID" (großes D) - das ist ebenfalls nicht schön. Entscheide dich für genau eine Version - ich würde vorschlagen, vernünftiges CamelCase zu machen, also "UserId". Man kann auch noch diskutieren, ob der Array-Index nicht lieber "userId" heißen sollte - der erste Buchstabe eines Variablennamens gehört laut Zend-Codingstandards klein geschrieben, aber es gibt andere Standards, die auch Alternativen erlauben.

        Noch irgendwelche Fragen? :)

        - Sven Rautenberg

        1. Noch irgendwelche Fragen? :)

          Nein hast so ziemlich alles beantwortet. ^^

          MfG
          Simon