+ Antworten
Seite 3 von 7 ErsteErste 1 2 3 4 5 6 ... LetzteLetzte
Ergebnis 31 bis 45 von 99

Thema: [Tutorial] Login Systeme von Einfach bis Profi

  1. #31
    TP-Newbie thosch macht alles soweit korrekt
    Registriert seit
    May 2009
    Ort
    Kelsterbach
    Beiträge
    1

    Probleme mit dem Salt

    Zuerst einmal allerbesten Dank für dieses Super-Tuturial, welches ich absolut klasse finde. Ich hänge derzeit leider ein wenig mit dem Erzeugen des Passwortes mit Salt fest.

    Das Salt erzeuge ich per Zufallsstring mit folgendem Skript:

    PHP-Code:
    function password_zusatz($laenge=10)
    {
        
    //Zeichen, die im Zufallsstring vorkommen sollen
        
    $zeichen "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        
    $password_zusatz "";
        
    $anzahl_zeichen strlen($zeichen);
        for(
    $i=0;$i<$laenge;$i++)
        {
            
    $password_zusatz .= $zeichen[mt_rand(0$anzahl_zeichen 1)];
        }
        return 
    $password_zusatz;
    }

    $password_zusatz password_zusatz(); 
    Das Passwort speichere ich einfach mit $password = md5( $_POST["password"] ); (Ich speichere also im Formularfeld eingegebene PW als md5-Wert in der DB.)

    Jetzt stellt sich mir die Frage, wie ich diese beiden Dinge zusammenbringe. Eine Anmeldung ist so noch nicht möglich. Irgendwo habe ich also einen dicken Denkfehler bei der Erzeugung des Passwortes.

    Ich freue mich sehr über Hinweise, die mich weiterbringen ;-)

    Viele Grüße
    Thomas

    UPDATE: Problem selbst gelöst
    Manchmal ist es echt verhext. Kaum gepostet, fällt einem nach etwas Grübeln die Lösung ein :-) Für alle, die das gleiche "Problem" haben, wie ich:

    PHP-Code:
    // Zufallsstring mit einer Länge von 10 Zeichen generieren
    function password_zusatz($laenge=10)
    {
        
    //Zeichen, die im Zufallsstring vorkommen sollen
        
    $zeichen "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        
    $password_zusatz "";
        
    $anzahl_zeichen strlen($zeichen);
        for(
    $i=0;$i<$laenge;$i++)
        {
            
    $password_zusatz .= $zeichen[mt_rand(0$anzahl_zeichen 1)];
        }
        return 
    $password_zusatz;
    }

    $password_eingabe "testpassword";
    $password_zusatz password_zusatz();
    $password md5($password_eingabe $password_zusatz);

    echo 
    "PASSWORT: $password<br />PASSWORT-ZUSATZ: $password_zusatz"
    Das braucht man ja jetzt nur in die Datenbank zu schreiben ;-)
    Geändert von thosch (04.05.2009 um 15:15 Uhr)

  2. #32
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo,

    schön das es noch Leute wie thosch gibt, die ihre Probleme selbst lösen, statt einfach nur stumpf darauf warten, bis es jemand anderes für sie macht.

    Viele User (oder die meisten?!) lesen etwas von "Profi" und schon wird automatisch diese Variante genommen, obwohl die Kenntnisse oft nicht mal für die Anfänger Variante ausreichen, was natürlich zur Folge hat, dass man wie der Ochs vorm Berg darsteht und nicht weiter kommt.
    Damit nicht wieder und wieder die gleichen Fragen zum Thema "und wie kann ich jetzt User anlegen?" kommt -obwohl das eigentlich eine Fingerübung sein sollte, würde man wirklich die Fortgeschrittenen-Kenntnisse mitbringen, wie es in den Voraussetzungen dieses Tutorials erwähnt wird!!- habe ich hier ein kleines Ergänzungsscript geschrieben das die Logik dahinter zeigt.

    Dieser Schnipsel ist nicht, nicht, nicht dazu gedacht einfach planlos 1:1 übernommen zu werden, sondern er dient dazu gelesen, verstanden und angewendet zu werden!

    PHP-Code:
    <?php

    if (isset( $_POST['adduser'] ))
    {
        
    // Datenbankverbindung
        
    $db = @new MySQLi'localhost''dbbenutzer''dbpasswort''dbname' );
        if (
    mysqli_connect_errno() == 0)
        {
            if (
    get_magic_quotes_gpc()) $_POST array_map'stripslashes'array_map'trim'$_POST ) );
            
    $salt          substrmd5microtime() ), 010 );
            
    $pw_mit_salt   md5$_POST['passwort'] . $salt );
            
    $zuletzt_aktiv '0000-00-00 00:00:00';
            
    $fehlversuche  0;
            
    $aktiviert     1;
            
            
    // Benutzer in DB schreiben
            
    $sql "INSERT INTO
                        `login_profi` (`benutzername`, `passwort`, `passwort_zusatz`, `ip`, `benutzerinfo`, `anmeldung`, `zuletzt_aktiv`, `fehlversuche`, `aktiviert`)
                    VALUES
                        (?, ?, ?, ?, ?, ?, ?, ?, ?)"
    ;
            
    $insert $db->prepare$sql );
            
    $insert->bind_param'sssssssii',
                                 
    $_POST['benutzer'],
                                 
    $pw_mit_salt,
                                 
    $salt,
                                 
    $_SERVER['REMOTE_ADDR'],
                                 
    $_SERVER['HTTP_USER_AGENT'],
                                 
    md5$_SERVER['REQUEST_TIME'] ),
                                 
    $zuletzt_aktiv,
                                 
    $fehlversuche,
                                 
    $aktiviert);
            
    $insert->execute();
            if (
    $insert->affected_rows == 1)
            {
                echo 
    'Benutzer wurde angelegt.';
            }
            else
            {
                echo 
    'Benutzer konnte nicht angelegt werden!';
            }
        }
        else
        {
            echo 
    'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
        }
    }

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>phpBuddy.eu - Login Script - Neuer Benutzer</title>
    </head>

    <body>
    <form id="adduserform" method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
        <label for="benutzer">Benutzer: </label><input type="text" name="benutzer" id="benutzer" value="" /><br />
        <label for="passwort">Passwort: </label><input type="password" name="passwort" id="passwort" value="" /><br />
        <input type="submit" name="adduser" id="adduser" value="Benutzer hinzufügen" />
    </form>

    </body>
    </html>
    Wie unschwer zu erkennen ist, wurde MySQLi verwendet. Wer damit Probleme hat sollte sich vielleicht erst mein MySQLi Tutorial anschauen.

  3. #33
    TP-Junior steffi09 macht alles soweit korrekt Avatar von steffi09
    Registriert seit
    May 2009
    Ort
    Köln
    Beiträge
    10
    Hallo,
    ich wollte mich zunächst bei Rizzo für das klasse Tutorial bedanken.

    Mit Php habe ich eigentlich keine Probleme aber die bösen Sessions
    Habe Dein Skript so erweitert, dass man automatisch nach 5 falschen Loginversuchen 10 Minuten geblockt wird, dass man neue Benutzer hinzufügen / Verwalten kann, Rechteverwaltung (Admin / Normal) usw usw.

    Doch die lieben Sessions.

    Ich möchte nach dem Login eigentlich meine "Login-Seite" aktuallisieren und dort stehen haben "sie sind eingelogt".
    Das Problem bei Rizzos beispiel ist, dass er auf eine weitere Seite (geheim_profi) weiterleitet.

    und das kriege ich nicht hin
    Mein Ansatz war folgender:

    PHP-Code:
    <?php

    // Fehlermeldungen unterdrücken
    error_reporting);

    // Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird
    ini_set'session.use_only_cookies''1' );
    ini_set'session.use_trans_sid''0' );

    // Session starten
    session_start();

    // Sicherstellen das die SID durch den Server vergeben wurde
    // um einen möglichen Session Fixation Angriff unwirksam zu machen
    if (!isset( $_SESSION['server_SID'] ))
    {
        
    // Möglichen Session Inhalt löschen
        
    session_unset();
        
    // Ganz sicher gehen das alle Inhalte der Session gelöscht sind
        
    $_SESSION = array();
        
    // Session zerstören
        
    session_destroy();
        
    // Session neu starten
        
    session_start();
        
    // Neue Server-generierte Session ID vergeben
        
    session_regenerate_id();
        
    // Status festhalten
        
    $_SESSION['server_SID'] = true;
    }

    // Funktionen einbinden
    include( 'funktionen.inc.php' );

    $conid db_connect();


    /// ###### Meine Abfrage ########

    if(!checkUser$conid ))
    // Wenn der Benutzer nicht eingelogt ist....

    // Variablen deklarieren
    $_SESSION['angemeldet'] = false;
    $conid                  '';
    $eingabe                = array();
    $anmeldung              false;
    $update                 false;
    $fehlermeldung          '';


    // Wenn das Formular abgeschickt wurde
    if (isset( $_POST['login'] ))
    {
        
    // Benutzereingabe bereinigen
        
    $eingabe cleanInput();
        
    // Benutzer anmelden
        
    $anmeldung loginUser$eingabe['benutzername'], $eingabe['passwort'], $conid );
        
    // Anmeldung war korrekt
        
    if ($anmeldung)
        {
            
    // Benutzer Identifikationsmerkmale in DB speichern
            
    $update updateUser$eingabe['benutzername'], $conid );
            
    // Bei erfolgreicher Speicherung
            
    if ($update)
            {
                
    header'location: login_profi.php' );
                exit;
            }
            else
            {
                
    $fehlermeldung '<h3>Bei der Anmeldung ist ein Problem aufgetreten!</h3>';
            }
        }
        else
        {
            
    $fehlermeldung '<h3>Die Anmeldung war fehlerhaft!</h3>';
        }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>phpBuddy.eu - Login Script</title>
    </head>

    <body>

    <?php
    // Falls die Fehlermeldung gesetzt ist
    if ($fehlermeldung) echo $fehlermeldung;
    ?>

    <form id="loginform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <label for="benutzer">Benutzer: </label><input type="text" name="benutzer" id="benutzer" value="" /><br />
        <label for="passwort">Passwort: </label><input type="password" name="passwort" id="passwort" value="" /><br />
        <input type="submit" name="login" id="login" value="Anmelden" />
    </form>

    </body>
    </html>
    <?php

    // #### Meine eingebaute If-Abfrage - Ende
    else{
    // Dies soll ausgegeben werden, wenn die Seite aktuallisiert ist und der Benutzer eingelogt ist

        
    echo "eingelogt";
    }
    ?>
    Doch hier erhalte ich nur die Meldung "Login fehlerhaft"

    Bin für jede Hilfe dankbar

    Liebe Grüße
    steffi


    Update
    Ich glaube ich bin nun einen Schritt weiter.
    Mein aktuelles Skript sieht nun so aus:

    PHP-Code:
    // Fehlermeldungen unterdrücken
    <?php
    error_reporting
    (E_ALL);
    ini_set('display_errors'1);

    // Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird
    ini_set'session.use_only_cookies''1' );
    ini_set'session.use_trans_sid''0' );

    // Session starten
    session_start();

    // Sicherstellen das die SID durch den Server vergeben wurde
    // um einen möglichen Session Fixation Angriff unwirksam zu machen

    // Funktionen einbinden
    include( 'funktionen.inc.php' );
    $conid db_connect();

    if (
    $_GET['benutzer'] == 'abmelden')
    {
        
    resetUser();
    }

    if (
    checkUser$conid ))
    {
        
    ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>phpBuddy.eu - Geheime Seite</title>
    </head>

    <body>

    <h3>Willkommen im geschützten Bereich! ;-)</h3>
    <p><a href="<?php echo $_SERVER['PHP_SELF']. "?benutzer=abmelden"?>">Benutzer abmelden</a></p>

    </body>
    </html>
        <?
    }
    else{
                
                if (!isset( 
    $_SESSION['server_SID'] ))
                {
                    
    // Möglichen Session Inhalt löschen
                    
    session_unset();
                    
    // Ganz sicher gehen das alle Inhalte der Session gelöscht sind
                    
    $_SESSION = array();
                    
    // Session zerstören
                    
    session_destroy();
                    
    // Session neu starten
                    
    session_start();
                    
    // Neue Server-generierte Session ID vergeben
                    
    session_regenerate_id();
                    
    // Status festhalten
                    
    $_SESSION['server_SID'] = true;
                }
                
                
    // Variablen deklarieren
                
    $_SESSION['angemeldet'] = false;
                
    $conid                  '';
                
    $eingabe                = array();
                
    $anmeldung              false;
                
    $update                 false;
                
    $fehlermeldung          '';
                
                
    // Datenbankverbindung öffnen
                
    $conid db_connect();
                
                
    // Wenn das Formular abgeschickt wurde
                
    if (isset( $_POST['login'] ))
                {
                    
    // Benutzereingabe bereinigen
                    
    $eingabe cleanInput();
                    
    // Benutzer anmelden
                    
    $anmeldung loginUser$eingabe['benutzername'], $eingabe['passwort'], $conid );
                    
    // Anmeldung war korrekt
                    
    if ($anmeldung)
                    {
                        
    // Benutzer Identifikationsmerkmale in DB speichern
                        
    $update updateUser$eingabe['benutzername'], $conid );
                        
    // Bei erfolgreicher Speicherung
                        
    if ($update)
                        {
                            
    // Auf geheime Seite weiterleiten
                            
    header'location: login_profi.php' );
                            exit;
                            
    // Benutzer prüfen
                        /*        if (checkUser( $conid ))
                                {
                                    echo "angemeldet";
                                }
                                else{
                                    echo "nicht angemeldet";
                                }*/
                        
    }
                        else
                        {
                            
    $fehlermeldung '<h3>Bei der Anmeldung ist ein Problem aufgetreten!</h3>';
                        }
                    }
                    else
                    {
                        
    $fehlermeldung '<h3>Die Anmeldung war fehlerhaft!</h3>';
                    }
                }
                
                
    ?>
                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
                <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>phpBuddy.eu - Login Script</title>
                </head>
                
                <body>
                
                <?php
                
    // Falls die Fehlermeldung gesetzt ist
                
    if ($fehlermeldung) echo $fehlermeldung;
                
    ?>
                
                <form id="loginform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
                    <label for="benutzer">Benutzer: </label><input type="text" name="benutzer" id="benutzer" value="" /><br />
                    <label for="passwort">Passwort: </label><input type="password" name="passwort" id="passwort" value="" /><br />
                    <input type="submit" name="login" id="login" value="Anmelden" />
                </form>
                
                </body>
                </html>
    <?php
    }
    ?>
    Damit klappt es fast.

    Ich erhalte jetzt folgende Warnung:
    Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /home/www/web220/html/login/funktionen.inc.php on line 181
    Warum die Meldung kommt weiß ich auch...
    Denn ich habe ja meine Abfrage if(checkUser.... )
    und dort rufe ich ja bereis session_regenerate_id() auf.
    Doch wenige Zeilen später tritt ja ein: if (!isset( $_SESSION['server_SID'] ))
    und hier rufe ich wieder session_regenerate_id auf.

    Doch einfach weglassen kann ich es ja nicht
    Geändert von steffi09 (06.05.2009 um 01:52 Uhr)

  4. #34
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo steffi09,

    die Fehlermeldung ...
    Code:
    Cannot regenerate session id - headers already sent in
    ... ist doch eindeutig. Es wurde eine Ausgabe an den Browser geschickt, bevor es zu der Codezeile kam. Ausgabe kann alles sein, ein HTML Header, ein Leerzeichen oder Zeilenumbruch nach dem schließenden PHP Block in einer inkludierten Datei, usw.
    Im Listing deines Update steht vor dem PHP-Teil ...
    Code:
    // Fehlermeldungen unterdrücken
    ... sowas geht nicht und genau sowas löst dann solche Fehler aus.

    Wenn man "dreckig" arbeiten möchte, setzt man in die Index Datei, die eine PHP Datei sein muss, einfach ein ...
    PHP-Code:
    ob_start(); 
    Das muss als erstes im Script stehen, noch bevor irgend etwas inkludiert oder abgearbeitet wird!
    Das ob_start schaltet die Ausgabepufferung (ob = output buffering) ein und sendet die Ausgabe das kompletten Scripts an den Browser.

  5. #35
    TP-Junior steffi09 macht alles soweit korrekt Avatar von steffi09
    Registriert seit
    May 2009
    Ort
    Köln
    Beiträge
    10
    Hallo Rizzo,
    vielen Dank für Deine Antwort zunächst

    Sehe gerade, dass ich einen Fehler beim übertragen hier ins Forum hatte.

    Ich schreibe daher nochmal sauber meine aktuellen Dateien / Fehlermeldungen auf.


    Meine
    login_profi.php sieht folgendermaßen aus:

    PHP-Code:
    <?php

    // Fehlermeldungen unterdrücken : Aktuell jedoch alle Fehler anzeigen!
    error_reporting(E_ALL);
    ini_set('display_errors'1);

    // Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird
    ini_set'session.use_only_cookies''1' );
    ini_set'session.use_trans_sid''0' );

    // Session starten
    session_start();

    // Sicherstellen das die SID durch den Server vergeben wurde
    // um einen möglichen Session Fixation Angriff unwirksam zu machen

    // Funktionen einbinden
    include( 'funktionen.inc.php' );
    $conid db_connect();

    if (
    checkUser$conid ))
    {
        
    ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>phpBuddy.eu - Geheime Seite</title>
    </head>

    <body>

    <h3>Willkommen im geschützten Bereich! ;-)</h3>
    <p><a href="<?php echo $_SERVER['PHP_SELF']. "?benutzer=abmelden"?>">Benutzer abmelden</a></p>

    </body>
    </html>
        <?
    }
    else{            
        if (!isset( 
    $_SESSION['server_SID'] ))
        {
            
    // Möglichen Session Inhalt löschen
            
    session_unset();
            
    // Ganz sicher gehen das alle Inhalte der Session gelöscht sind
            
    $_SESSION = array();
            
    // Session zerstören
            
    session_destroy();
            
    // Session neu starten
            
    session_start();
            
    // Neue Server-generierte Session ID vergeben
            
    session_regenerate_id();
            
    // Status festhalten
            
    $_SESSION['server_SID'] = true;
        }
        
        
    // Variablen deklarieren
        
    $_SESSION['angemeldet'] = false;
        
    $conid                  '';
        
    $eingabe                = array();
        
    $anmeldung              false;
        
    $update                 false;
        
    $fehlermeldung          '';
        
        
    // Datenbankverbindung öffnen
        
    $conid db_connect();
        
        
    // Wenn das Formular abgeschickt wurde
        
    if (isset( $_POST['login'] ))
        {
            
    // Benutzereingabe bereinigen
            
    $eingabe cleanInput();
            
    // Benutzer anmelden
            
    $anmeldung loginUser$eingabe['benutzername'], $eingabe['passwort'], $conid );
            
    // Anmeldung war korrekt
            
    if ($anmeldung)
            {
                
    // Benutzer Identifikationsmerkmale in DB speichern
                
    $update updateUser$eingabe['benutzername'], $conid );
                
    // Bei erfolgreicher Speicherung
                
    if ($update)
                {
                    
    // Auf geheime Seite weiterleiten
                    
    header'location: login_profi.php' );
                    exit;
                }
                else
                {
                    
    $fehlermeldung '<h3>Bei der Anmeldung ist ein Problem aufgetreten!</h3>';
                }
            }
            else
            {
                
    $fehlermeldung '<h3>Die Anmeldung war fehlerhaft!</h3>';
            }
        }
        
        
    ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>phpBuddy.eu - Login Script</title>
        </head>
        
        <body>
        
        <?php
        
    // Falls die Fehlermeldung gesetzt ist
        
    if ($fehlermeldung) echo $fehlermeldung;
        
    ?>
        
        <form id="loginform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <label for="benutzer">Benutzer: </label><input type="text" name="benutzer" id="benutzer" value="" /><br />
            <label for="passwort">Passwort: </label><input type="password" name="passwort" id="passwort" value="" /><br />
            <input type="submit" name="login" id="login" value="Anmelden" />
        </form>
        
        </body>
        </html>
    <?php
    }
    ?>
    Die Fehlermeldung wenn ich die Seite aufrufe:
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web220/html/login/funktionen.inc.php:182) in /home/www/web220/html/login/login_profi.php on line 57

    Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /home/www/web220/html/login/login_profi.php on line 59

    Die Positionen der Fehlermeldungen:
    functionen.inc.php
    PHP-Code:
    <?php
    function checkUser$conid )
    {
        
    // Alte Session löschen und Sessiondaten in neue Session transferieren
        
    session_regenerate_idtrue ); // [ZEILE 181]
        
    if ($_SESSION['angemeldet'] !== true) return false// [ZEILE 182]

    // ....
    }
    ?>
    login_profi.php
    PHP-Code:
        if (!isset( $_SESSION['server_SID'] ))
        {
            
    // Möglichen Session Inhalt löschen
            
    session_unset();
            
    // Ganz sicher gehen das alle Inhalte der Session gelöscht sind
            
    $_SESSION = array();
            
    // Session zerstören
            
    session_destroy();
            
    // Session neu starten
            
    session_start();  // [ZEILE 56]
    //.....
                

    Im Grunde verstehe ich ja warum die Fehlermeldung kommt.

    Durch die Prüfung mit checkUser sendet ja mit "session_regenerate_id" bereits einen Header und liefert logischerweiße am Ende (da der user nicht eingelogt ist) false zurück.

    In meiner login_profi.php
    gelange ich dadurch den Else-Teil von if(checkUser) und habe folgende Codezeilen:

    if (!isset( $_SESSION['server_SID'] ))
    {
    // Möglichen Session Inhalt löschen
    session_unset();
    // Ganz sicher gehen das alle Inhalte der Session gelöscht sind
    $_SESSION = array();
    // Session zerstören
    session_destroy();
    // Session neu starten
    session_start();


    Mit session_start sende ich ja erneut Headers... Und dadurch kommen ja die Warnungen.

    Habe ich keine alternative zu dem ob_start()?
    Ich müsste ja im Prinzip nur 1x die Headers senden :-)

    Liebe Grüße und danke im Voraus
    steffanie

  6. #36
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo Steffanie,

    wieso fragst Du nach Hilfe, wenn Du die Antwort dann automatisch verwirfst?

    Es spielt keine Rolle, wie oft Du eine neue Session ID generieren lässt. Beispielcode:
    PHP-Code:
    <?php

    error_reporting
    E_ALL );

    session_start();
    $a session_id();
    session_regenerate_idtrue );
    $b session_id();
    session_regenerate_idtrue );
    $c session_id();

    echo <<<SIDOUT
    $a\n
    $b\n
    $c\n
    SIDOUT;

    ?>
    ... gibt folgendes aus:
    Code:
    1ahi6220mg0pouh2j1mfv2d414
    
    nhs73716t6r8p122nbl99e3s56
    
    3svmp6vei7kindj5jdt7abuln6
    Die Ausgabe variiert natürlich bei jedem Aufruf. Man kann also ohne Probleme mehrmals session_regenerate_id hintereinander aufrufen.
    Auch das mehrfach Starten einer Session führt nicht zu dem Fehler. Beispielcode:
    PHP-Code:
    <?php

    error_reporting
    E_ALL );

    session_start();
    $a session_id();
    session_regenerate_idtrue );
    $b session_id();
    session_regenerate_idtrue );
    $c session_id();
    session_start();

    echo <<<SIDOUT
    $a\n
    $b\n
    $c\n
    SIDOUT;

    ?>
    Man beachte das 2. session_start() nachdem bereits eine Session gestartet wurde und diverse IDs neu generiert wurden! Ausgabe:
    Code:
    Notice: A session had already been started - ignoring session_start() in /home/rizzo/htdocs/test/testdummy.php on line 11
    
    1ahi6220mg0pouh2j1mfv2d414
    
    nhs73716t6r8p122nbl99e3s56
    
    3svmp6vei7kindj5jdt7abuln6
    Wie Du siehst kommt es bei mir also auch nicht zum "Header already sent" Abbruch.
    Ich bleibe dabei, es wird bereits irgend eine Art Ausgabe an den Browser geschickt, ehe die Session gestartet wird.

    Sehr sehr oft ist es Whitespace (unsichtbare Leerzeichen oder Zeilenumbrüche) nach dem schließenden ?> in einer inkludierten Datei.
    Auch gerne genommen ist der HTML Head und man inkludiert in den Body.
    Andere Kontrukte sind eingerückte, öffnende PHP Blöcke, da das Einrücken eben diese Whitespaces sind - hier hilft es einfach sauber zu arbeiten.

    Hast Du mal testweise das ob_start() eingebaut um zu sehen, ob es dann überhaupt funktioniert?

  7. #37
    TP-Junior steffi09 macht alles soweit korrekt Avatar von steffi09
    Registriert seit
    May 2009
    Ort
    Köln
    Beiträge
    10
    Hallo Rizzo,
    danke für Deine ausführliche Antwort.

    Zitat Zitat von Rizzo Beitrag anzeigen
    Hallo Steffanie,
    wieso fragst Du nach Hilfe, wenn Du die Antwort dann automatisch verwirfst?
    Nun... Ich möchte nicht einfach eine Frage in den Raum stellen nach dem Motto "weiß ich nicht, beschäftige ich mich auch nicht weiter mit".
    Daher habe ich auch meine Ideen / Vermutungen warum es zu dem Fehler kommt geschrieben.


    Ich bleibe dabei, es wird bereits irgend eine Art Ausgabe an den Browser geschickt, ehe die Session gestartet wird.

    Sehr sehr oft ist es Whitespace (unsichtbare Leerzeichen oder Zeilenumbrüche) nach dem schließenden ?> in einer inkludierten Datei.
    Du hattest recht.
    Es war ein whitespace

    Bin nun weiter und es kommen keine Fehlermeldungen mehr :-)

    Jedoch klappt der Login noch nicht ganz....

    Die relevante Stelle in der login_profi.php:

    Mit diesen Codezeilen möchte ich erreichen, dass ich nach dem Login die Seite selbst nochmal aufrufe und if(checkUser) true zurück gibt.

    PHP-Code:
    if ($update){
      
    header'location: login_profi.php' );
      exit;

    Nach dem header(...) aufgerufen wurde, bin ich jedoch nicht eingelogt.

    Habe daher folgendes getestet:
    PHP-Code:
    if ($update){
      echo 
    "Test: Eingelogt";

    Hier wird mir auch "Test: Eingelogt" ausgegeben. D.h. der User ist bis zum Aufruf von header( 'location: login_profi.php' ); eingelogt.
    Irgendetwas scheint also den Login dann zu zerstören


    Vielen lieben Dank für Deine Hilfe
    Steffanie

  8. #38
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Wird in der Session auch vermerkt, dass der Benutzer dann angemeldet ist?

    Bei solchen Sachen empfiehlt es sich, den gesamten Prozess Schritt für Schritt durchzugehen und unterwegs immer mit z.B. print_r( $_SESSION ); zu schauen ob und was in der Session steht.
    Ebenso sollte man immer alle Browserfenster schliessen bei jedem neuen Durchlauf, da die Session lebt, solange der Browser offen ist.

  9. #39
    TP-Junior steffi09 macht alles soweit korrekt Avatar von steffi09
    Registriert seit
    May 2009
    Ort
    Köln
    Beiträge
    10
    Hallo zusammen

    Mit großen Schritten zum Ziel

    Es funktioniert nun alles einwandfrei und ich bin selbst nach dem Refresh eingelogt... Vielen vielen Dank Rizzo.

    Doch einen Tip brauche ich von Euch noch.

    Meine aktuelle login_profi.php:

    PHP-Code:
    <?php

    error_reporting
    (E_ALL);
    ini_set('display_errors'1);

    // Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird
    ini_set'session.use_only_cookies''1' );
    ini_set'session.use_trans_sid''0' );

    // Session starten
    session_start();

    // Sicherstellen das die SID durch den Server vergeben wurde
    // um einen möglichen Session Fixation Angriff unwirksam zu machen

    // Datenbankverbindung öffnen

    include( 'funktionen.inc.php' );
    $conid db_connect();


    if (
    checkUser$conid ))
    {
        echo 
    "[ Benutzerpanel ]";
    }
    else{
        
    if (!isset( 
    $_SESSION['server_SID'] ))
    {
        
    // Möglichen Session Inhalt löschen
        
    session_unset();
        
    // Ganz sicher gehen das alle Inhalte der Session gelöscht sind
        
    $_SESSION = array();
        
    // Session zerstören
        
    session_destroy();
        
    // Session neu starten
        
    session_start();
        
    // Neue Server-generierte Session ID vergeben
        
    session_regenerate_id();
        
    // Status festhalten
        
    $_SESSION['server_SID'] = true;
    }

    // Funktionen einbinden


    // Variablen deklarieren
    $_SESSION['angemeldet'] = false;
    //$conid                  = '';
    $eingabe                = array();
    $anmeldung              false;
    $update                 false;
    $fehlermeldung          '';



    // Wenn das Formular abgeschickt wurde
    if (isset( $_POST['login'] ))
    {
        
    // Benutzereingabe bereinigen
        
    $eingabe cleanInput();
        
    // Benutzer anmelden
        
    $anmeldung loginUser$eingabe['benutzername'], $eingabe['passwort'], $conid );
        
    // Anmeldung war korrekt
        
    if ($anmeldung)
        {
            
    // Benutzer Identifikationsmerkmale in DB speichern
            
    $update updateUser$eingabe['benutzername'], $conid );
            
    // Bei erfolgreicher Speicherung
            
    if ($update)
            {
                
    // Auf geheime Seite weiterleiten
                //header( 'location: geheim_profi.php' );
                //exit;
                
    header'location: login_profi.php' );
                exit;
            }
            else
            {
                
    $fehlermeldung '<h3>Bei der Anmeldung ist ein Problem aufgetreten!</h3>';
            }
        }
        else
        {
            
    $fehlermeldung '<h3>Die Anmeldung war fehlerhaft!</h3>';
        }
    }

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>phpBuddy.eu - Login Script</title>
    </head>

    <body>

    <?php
    // Falls die Fehlermeldung gesetzt ist
    if ($fehlermeldung) echo $fehlermeldung;
    ?>

    <form id="loginform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <label for="benutzer">Benutzer: </label><input type="text" name="benutzer" id="benutzer" value="" /><br />
        <label for="passwort">Passwort: </label><input type="password" name="passwort" id="passwort" value="" /><br />
        <input type="submit" name="login" id="login" value="Anmelden" />
    </form>

    </body>
    </html>
    <?
    }

    if (
    checkUser$conid ))
    {
        echo 
    "[ Nachricht die man nur als eingelogter sieht ]";
    }
    ?>
    Damit erhalte ich folgende Ausgabe:

    Code:
    [ Benutzerpanel ]
    Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /home/www/web220/html/login/v2/funktionen.inc.php on line 181
    [ Nachricht die man nur als eingelogter sieht ]
    Warum ich die Meldung erhalte ist mir klar.
    Denn ich rufe ja oben meine checkUser auf und gebe das Userpanel aus.
    In den letzten Zeilen prüfe ich nochmals mit checkUser ob wir eingelogt sind.
    Durch den checkUser ganz oben habe ich ja schon eine Ausgabe vor dem header erzeugt..

    Doch wie löse ich sowas am besten?
    Vielleicht in dieser Richtung?

    PHP-Code:
    error_reporting(E_ALL);
    ini_set('display_errors'1);

    // Erzwingen das Session-Cookies benutzt werden und die SID nicht per URL transportiert wird
    ini_set'session.use_only_cookies''1' );
    ini_set'session.use_trans_sid''0' );

    // Session starten
    session_start();

    include( 
    'funktionen.inc.php' );
    $conid db_connect();


    $login false;

    if(
    checkUser($conid)){
      
    $login true;
    }
    else{
      
    $login false;
    }


    if(
    $login){
     echo 
    "[ USERPANEL ]";
    }
    else{
     
    // Loginform
    }

    if(
    $login){
     echo 
    "[ Nachricht die man nur als eingelogter sieht ]";

    Oder ist dieser Ansatz irgendwie unsicher?

    Danke sehr
    Steffanie

  10. #40
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Wieso immer so kompliziert, wenn es auch einfach geht?!
    Du brauchst doch auf jeder Seite nur ein mal zu prüfen, ob Jemand eingeloggt ist oder nicht. Diesen Status hältst Du dann in einer Varianblen fest, den Du im Verlauf der Seite so oft abfragen kannst wie Du willst.

    Angenommen checkUser() gibt true zurück, wenn der User angemeldet ist, dann geht man in dieser Art vor:

    PHP-Code:
    <?php
    // PHP Block
    $angemeldet false;
    $angemeldet checkUser(); // ändert sich bei Erfolg auf true

    // irgend ein PHP Code der nur bei eingeloggt ausgeführt wird
    if ($angemeldet === true)
    {
        
    // mach was für angemeldete User
    }
    ?>

    // HTML Block
    .
    .
    .
    <?php
    if ($angemeldet === true)
    {
        echo 
    '<h1>Hallo angemeldeter Benutzer</h1>';
    }
    else
    {
        echo 
    '<h1>Hallo Gast, bitte melde dich an!</h1>';
    }
    ?>

    // Mehr HTML
    .
    .
    .
    Es ist also nicht nötig auf einer Seite wieder und wieder die checkUser()-Funktion auszuführen, sondern einfach den Status abfragen.

  11. #41
    TP-Junior pHp-Noob macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Ort
    Deutschland
    Beiträge
    6
    Zum Fortgeschrittenen System hab ich eine Frage ich versuche hierzu das passende Registrierungsformular zu bauen,
    funktioniert soweit auch schonmal,
    jedoch hab ich gesehen das bei dem User Otto, in der Fortgeschrittenen Variante, der Wert für Cookie_Hash anscheinend mit md5() verschlüsselt wurde oder ähnlichem.

    Nun zu meiner Frage:

    Den entsprechenden Wert für diesen Cookie_Hash, wie bekomme ich den bei der Registrierung oder beim 1. Login oder einem Bestätigungslink per Mail oder wie auch immer, in meine Datenbank um mich mit dem Login Script dann einloggen zu können?


    hat sich erledigt, danke dennoch für das gute Tutorial
    Geändert von pHp-Noob (10.05.2009 um 00:29 Uhr)

  12. #42
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Einfach einen Hash mit z.B. md5( $_SERVER['REQUEST_TIME'] ); erzeugen und beim anlegen eines neuen User mit in die DB schreiben wäre zu einfach?

  13. #43
    TP-Junior pHp-Noob macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Ort
    Deutschland
    Beiträge
    6
    Ja das währe es

    danke für den Tip

    Ich würde gerne nun mit der UserID arbeiten, nur wie komm ich daran?
    Muss ich diese zuerst an die Session in der functions.inc.php übergeben oder wie genau stelle ich das an?
    Geändert von pHp-Noob (24.05.2009 um 15:43 Uhr)

  14. #44
    TP-Junior Kazumi macht alles soweit korrekt
    Registriert seit
    Jun 2009
    Beiträge
    11
    hi, bin ganz neu hier und muss sagen, schöne anleitungen,

    bin gerade bei der Variante Fortgeschritten

    wo muss ich genau die Login Daten in die MYSQL Datenbank eintragen?

    kannste mal das genauer erklären, du oder irgendjemand andres.

    Mysql ist nicht so meine welt

    hier bin ich doch richtig...



    Hab bis lang nur erfahrung mit Boards installation gemacht, da musste man das ganze nicht machen ...
    Geändert von phpBuddy (16.06.2009 um 03:28 Uhr) Grund: Bild entfernt. Bitte so große Bilder nur anhängen.

  15. #45
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo,

    schon die Datei zum Tutorial heruntergeladen? Da ist zu allen Varianten alles drin was Du brauchst.

+ Antworten
Seite 3 von 7 ErsteErste 1 2 3 4 5 6 ... LetzteLetzte

Ähnliche Themen

  1. CRM-Systeme
    Von overflood im Forum Business allgemein
    Antworten: 3
    Letzter Beitrag: 09.11.2007, 17:16
  2. Bildergalerie Systeme
    Von Robert im Forum Webdesign allgemein
    Antworten: 3
    Letzter Beitrag: 28.06.2007, 16:24
  3. GDS-Systeme - jemand Erfahrung?
    Von Kafkaesk im Forum Business allgemein
    Antworten: 3
    Letzter Beitrag: 30.10.2005, 01:53
  4. Shop-Systeme
    Von aferber im Forum Content Management Systeme & Shop Systeme
    Antworten: 0
    Letzter Beitrag: 16.02.2005, 11:32
  5. Template Systeme
    Von Kawa im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 23.01.2004, 16:24

Stichworte


Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51