Authentifizierung mit PHP / Session

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

  • Authentifizierung mit PHP / Session

    Hallo Forum,

    ich habe auf einer Webseit für den Adminbereich eine Authentifizierung eingebaut die wie folgt aussieht
    PHP-Code:
    (auth.php)
    session_start();

    $hostname $_SERVER['HTTP_HOST'];
    $path dirname($_SERVER['PHP_SELF']);

    if (!isset(
    $_SESSION['angemeldet_bps']) || !$_SESSION['angemeldet_bps']) 
    {
        
    header('Location: [url]http://[/url]'.$hostname.($path == '/' '' $path).'/login.php');
             exit;

    Diese Datei binde ich in alle zu schützenden Dateien ein
    Hier die login.php in groben Zügen
    PHP-Code:
    if($_SERVER['PHP_AUTH_USER']==$Benutzername && (md5($_SERVER['PHP_AUTH_PW'])==$UserPass))
    {
        echo
    "Der geschützte Bereich.<br>";
        
    session_start();

        
    $hostname $_SERVER['HTTP_HOST'];
        
    $path dirname($_SERVER['PHP_SELF']);

           
    // Benutzername und Passwort werden überprüft
           
    $_SESSION['angemeldet_bps'] = true;

        
    // Weiterleitung zur geschützten Startseite
        
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1'
        {
            if (
    php_sapi_name() == 'cgi'
            {
                
    header('Status: 303 See Other');
            }
            else 
            {
                
    header('HTTP/1.1 303 See Other');
            }
         }

         
    header('Location: [url]http://[/url]'.$hostname.($path == '/' '' $path).'/beitrag_freigabe.php');
         exit;
    }
    else
    {
        
    header("WWW-Authenticate: Basic realm=\"Admin Bereich\"");
        
    header("HTTP/1.0 401 Unauthorized");
        echo
    "Diese Webseite ist zugriffsgeschützt.";

    Es gibt jetzt noch eine separate PHP Datei, die nur über ein eigenes Passwort erreicht werden soll.
    Hierfür habe ich eine eigene auth_erf.php und login_erf.php
    Datei erstellt (mit eigener Session-Bezeichnung)
    Sobald sich ein User auf diese einglogt hat, muss er trotz Abfrage ob die
    o.g. Session existiert nicht mehr Authentifizieren, was ich sehr verwunderlich finde.
    Kann mir jemand sagen worin mein Fehler liegt?

    Danke und Gruß
    Tolwin

  • #2
    Hier noch mal die anderen Skripte:
    (auth_erf.php)
    PHP-Code:
    session_start();

    $hostname $_SERVER['HTTP_HOST'];
    $path dirname($_SERVER['PHP_SELF']);

    if (!isset(
    $_SESSION['erf_angemeldet']) || !$_SESSION['erf_angemeldet']) 
    {
        
    header('Location: [url]http://[/url]'.$hostname.($path == '/' '' $path).'/login_erf.php');
             exit;

    und login_erf.php
    PHP-Code:
    if($_SERVER['PHP_AUTH_USER']==$Benutzername && (md5($_SERVER['PHP_AUTH_PW'])==$UserPass))
    {
        echo
    "Der geschützte Bereich.<br>";
        
    session_start();

        
    $hostname $_SERVER['HTTP_HOST'];
        
    $path dirname($_SERVER['PHP_SELF']);

           
    // Benutzername und Passwort werden überprüft
           
    $_SESSION['erf_angemeldet'] = true;

        
    // Weiterleitung zur geschützten Startseite
        
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1'
        {
            if (
    php_sapi_name() == 'cgi'
            {
                
    header('Status: 303 See Other');
            }
            else 
            {
                
    header('HTTP/1.1 303 See Other');
            }
         }

         
    header('Location: [url]http://[/url]'.$hostname.($path == '/' '' $path).'/beitrag_erfassen.php');
         exit;
    }
    else
    {
        
    header("WWW-Authenticate: Basic realm=\"Admin Bereich \"");
        
    header("HTTP/1.0 401 Unauthorized");
        echo
    "Diese Webseite ist zugriffsgeschützt.";

    Gruß
    Tolwin

    Kommentar


    • #3
      Hättest du die Boardregeln gelesen, wüsstest du, dass man den Quellcode umbrechen muss.

      PHP-Code:
      header('Location: <a href="http://" target= ... 
      das soll funktionieren?

      lies im php-manual nach, wo session_start() stehen darf.

      was ich sehr verwunderlich finde.
      find ich nicht.
      MfG
      aim
      Lies mich jetzt!
      - OT-Tags-Liebhaber und BB-Code-Einrücker -

      Kommentar


      • #4
        @aimbot

        danke für den Hinweis.
        Ich habe mir die Beschreibung von session_start() durchgelesen,
        konnte aber nichts falsches an meinem Skript entdecken. Grundsätzlich
        verwende ich Sessions mit Cookies die ich so starte:
        PHP-Code:
        session_set_cookie_params(2000'/''seitenname');
        session_start(); 
        und dies am Anfang des Skriptes, so wie es lt. php.net gefordert ist.
        Bisher habe ich auch mit unterschiedlichen Session Variablen gearbeitet,
        und sie waren immer mit den vorgegebenen Werten befüllt. Aber es muss
        doch ein Unterschied sein ob ich dieses
        PHP-Code:
        if (!isset($_SESSION['erf_angemeldet']) || !$_SESSION['erf_angemeldet']) 
        oder das prüfe
        PHP-Code:
        if (!isset($_SESSION['angemeldet_bps']) || !$_SESSION['angemeldet_bps']) 
        Meiner Meinung nach sind dies zwei verschiedene Variablen. Trotzdem wird
        die jeweils andere Session auf true gesetzt, auch wenn ich mich garnicht dafür authentifiziert habe....
        wie kann dies an session_start() liegen?

        Gruß
        Tolwin

        Kommentar


        • #5
          Original geschrieben von tolwin
          und dies am Anfang des Skriptes, so wie es lt. php.net gefordert ist.
          aha...
          PHP-Code:
          if($_SERVER['PHP_AUTH_USER']==$Benutzername && (md5($_SERVER['PHP_AUTH_PW'])==$UserPass))
          {
              echo
          "Der geschützte Bereich.<br>";
              
          session_start(); 
          brich deinen quelltext um !!!
          MfG
          aim
          Lies mich jetzt!
          - OT-Tags-Liebhaber und BB-Code-Einrücker -

          Kommentar


          • #6
            Also dies sollte nicht das Problem sein. Habes trotzdem testhalber
            an den Anfang des Skriptes gesetzt. Leider ohne Erfolg -
            es genügt noch immer das einmalige Authentifizieren um auf alle
            Seiten zu kommen, auch wenn diese nur die auth.php anstelle der auth_erf.php einbinden.
            Ich kann mir noch immer nicht erklären woran dies liegen kann.....

            Kommentar


            • #7
              Hast du dir mal mit print_r angeschaut, was so alles in $_SESSION drinsteht?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Danke! Hab vergessen dass SESSION ja ein Array ist und man so debuggen kann.
                Habe aber glaube ich das Problem entdeckt.
                Die Env-vars
                PHP-Code:
                $_SERVER['PHP_AUTH_USER']   (md5($_SERVER['PHP_AUTH_PW']) 
                bleiben auch beim Seitenwechsel noch gesetzt und der Vergleich über die
                DB ist natürlich immer noch true.

                Gruß
                Tolwin

                Kommentar


                • #9
                  du hast deinen quelltext immernoch nicht umgebrochen.
                  MfG
                  aim
                  Lies mich jetzt!
                  - OT-Tags-Liebhaber und BB-Code-Einrücker -

                  Kommentar

                  Lädt...
                  X