Finalplayer_Ryu: Zugriffskontrolle mittels SESSION

Ich möchte mittels SESSION eine Zugriffkontrolle machen, dafür habe ich bisher folgenden Code verwendet:

Nach erfolgreichen Login:
session_register("sessid");

Bei den geschützten Seiten:
if(!session_is_registered("sessid")){
 include("error.html");
 die;
}

Nun habe ich aber gelesen, dass session_register und session_is_registered nicht mehr verwenden sollte und was wahrscheinlich noch schlimmer ist, dass ich auf die Daten mittels $_SESSION lese und schreibe.

Nun meine Frage, welche andere Möglichkeit gibt es die oben gezeigte Routine zu lösen?

  1. Ich möchte mittels SESSION eine Zugriffkontrolle machen, dafür habe ich bisher folgenden Code verwendet:

    Nach erfolgreichen Login:
    session_register("sessid");

    Bei den geschützten Seiten:
    if(!session_is_registered("sessid")){
    include("error.html");
    die;
    }

    Nun habe ich aber gelesen, dass session_register und session_is_registered nicht mehr verwenden sollte und was wahrscheinlich noch schlimmer ist, dass ich auf die Daten mittels $_SESSION lese und schreibe.

    Nun meine Frage, welche andere Möglichkeit gibt es die oben gezeigte Routine zu lösen?

    Naja, z.B.

      
    $_SESSION['login'] = false;  
     Nach erfolgreichen Login:  
    $_SESSION['login'] = true;  
     if(!$_SESSION['login']){  
      include("error.html");  
      die;  
     }  
    
    

    Grüsse,
      Juan

    1. Naja, z.B.

      $_SESSION['login'] = false;
      Nach erfolgreichen Login:
      $_SESSION['login'] = true;
      if(!$_SESSION['login']){
        include("error.html");
        die;
      }

      
      >   
      > Grüsse,  
      >   Juan  
        
      Ja also erstmal danke, aber nachdem ich nun nicht mehr session\_register verwende, muss ich auf jeder Seite die aufgerufen wird, session\_start() aufrufen, da er sonst die SESSION-Variablen nicht findet, gehört das so?, oder ist da ein Fehler?
      
      1. Ja also erstmal danke, aber nachdem ich nun nicht mehr session_register verwende, muss ich auf jeder Seite die aufgerufen wird, session_start() aufrufen, da er sonst die SESSION-Variablen nicht findet, gehört das so?, oder ist da ein Fehler?

        Es ist richtig. Jede Seite die zur Session gehört, muss mit einem session_start() beginnen.

        Grüsse,
          Juan

        1. Ja also erstmal danke, aber nachdem ich nun nicht mehr session_register verwende, muss ich auf jeder Seite die aufgerufen wird, session_start() aufrufen, da er sonst die SESSION-Variablen nicht findet, gehört das so?, oder ist da ein Fehler?

          Es ist richtig. Jede Seite die zur Session gehört, muss mit einem session_start() beginnen.

          Grüsse,
            Juan

          Super, danke, war die letzte Info, die ich gebraucht hatte.

          Jetzt weiss ich auch, warum ich teilweise immer wieder Probleme hatte, hab nämlich den Umgang mit SESSION von nem Freund gelernt und anscheinend wusste er auch nicht, dass man die register-Methoden nicht mehr verwenden sollte.

          cy, Ryu

      2. Moin!

        Ja also erstmal danke, aber nachdem ich nun nicht mehr session_register verwende, muss ich auf jeder Seite die aufgerufen wird, session_start() aufrufen, da er sonst die SESSION-Variablen nicht findet, gehört das so?, oder ist da ein Fehler?

        Der Aufruf von session_register() ruft implizit session_start() auf, sofern das vorher noch nicht getan wurde. Sowas ist aber ganz schlechter Stil!

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
    2. Hi,

      würde mich auch mal interessieren was es bei Sessions zu beachten hat in Sachen Sicherheit. Welche Sicherheitslücken gibt es da und wie kann man sie möglichst schließen?

      bye
      franky

  2. Moin!

    Nun habe ich aber gelesen, dass session_register und session_is_registered nicht mehr verwenden sollte und was wahrscheinlich noch schlimmer ist, dass ich auf die Daten mittels $_SESSION lese und schreibe.

    Nun meine Frage, welche andere Möglichkeit gibt es die oben gezeigte Routine zu lösen?

    Der Session-Mechanismus funktioniert in PHP so:

    Ab dem Befehl session_start() steht dir das Array $_SESSION zur Verfügung und enthält den Zustand, den es beim letzten Speichern (also am Skriptende oder bei Aufruf von session_write_close()) eines Session-Skriptes hatte.

    Startzustand beim erstmaligen Aufruf ist ein leeres Array.

    Und dort hinein kannst du beliebige Werte speichern, die dir nicht verloren gehen. Beispielsweise: $_SESSION['benutzername'] = "John Doe" wäre die gültige Methode anstelle von session_register.

    Oder komplexere Konstrukte mit mehreren Dimensionen: $_SESSION['rechte'] = array('lesen','schreiben','löschen');

    Objekte sind grundsätzlich auch erlaubt, erfordern aber, dass du die Regeln zur Serialisierung und Deserialisierung von Objekten beachtest.

    Und alle Aktionen, die prüfen sollen, ob irgendein Sessionwert existiert oder einen gewünschten Wert hat, greifen eben mit den ganz normalen Variablenfunktionen (z.B. isset(), empty(), array_key_exists() etc.) auf das Array $_SESSION zu, dessen einzige Sonderbedeutung eben ist, dass es am Skriptende gespeichert und durch den Befehl session_start() wiederhergestellt wird (im Gegensatz zu jeder anderen Variable, die nicht gespeichert wird und deshalb bei der Wiederverwendung leer bleibt).

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Nunja, schön, dass du es so ausführlich aufgeschrieben hast... weiss ich eigentlich, beantwortet meine Frage, aber nur geringfühig bis gar nicht, denn, entschuldigung, dass ich das jetzt sage, solche allgemeinen Floskeln kann man überall lesen.

      Trotzdem danke, dass du dir die Mühe gemacht hast