setcookie() mag mich nicht mehr

elmyth

Erfahrenes Mitglied
Hallo,

ich hab da gerade ein Problem, wo ich mal nicht weiter komme.
Und zwar wird die If-Abfrage mit setcookie() geparst, jedoch wird einfach kein cookie gesetzt...

PHP:
<?php

    /* Alle Fehler ausgeben, sollten welche vorhanden sein */
    error_reporting(E_ALL);

    /* Config- und andere Dateien includen */
    require('./inc/mysql.inc.php');
    
    /* Login-Daten prüfen und ggf. ein Cookie setzen */
    if(isset($_POST['login_name']) && isset($_POST['login_password'])) {
		$username = $_POST['login_name'];
		$sql = "SELECT
                    `Name`, `Passwort`
                FROM
                    `bm_usr`
                WHERE
                    `Name` = '".$username."'";
        $res = mysql_fetch_array(mysql_query($sql));
        
        if(($_POST['login_name'] == $res['Name']) AND ($_POST['login_password'] == $res['Passwort'])) {
            setcookie("bm_keks",$res['Name'],60*60*24*365);
            header("Location: ".$HTTP_SERVER_VARS['PHP_SELF']);
        } else {
              header("Location: ".$HTTP_SERVER_VARS['PHP_SELF']."?login=failed");
        }
    }
    
    /* Cookie zerstören, wenn ausgeloggt wird */
    if(isset($_GET['login']) && ($_GET['login'] == "logout")) {
        setcookie("bm_keks", $res['Name'], time()+1);
        header("Location: ".$HTTP_SERVER_VARS['PHP_SELF']);
    }
    /* Wenn login fehlschlägt, Fehlerseite includen */
    if(isset($_GET['login']) && ($_GET['login'] == "failed")) {
        echo "<center>Login fehlgeschlagen <br />";
        echo "<a href=\"javascript:history.back()\">Zurück</a></center>";
    }
    elseif(!isset($_COOKIE['bm_keks'])) {
        include('./inc/login.inc.php');
    } else {

        /* Design includen - Part I */
        include('./inc/design_top.inc.php');
    
    }

?>

//edit:
Oder ist der Fehler garnicht in der Schleife selber?!
 
Zuletzt bearbeitet:
Was ich noch anmerken moechte...

1) Der Login ist sehr, sehr unsicher. Jeder, der etwas kenne hat, kann Cookies faken, also auch den Status "Eingeloggt". Loesung: Sessions
2) Zum Cookie loeschen kannst du auch einen Wert nehmen, der kleiner als der aktuelle Unix-Timestamp ist. setcookie("bm_keks", NULL, 0); waere evt. etwas performater. ;)
3) Der Error-Reporting solltest du, zumindest im Produktivbetrieb, auf dem Standardwert oder darunter laufen lassen, sonst ist PHP etwas zu geschwaetzig. Das hilft dann niemandem, ausser einem eventuellen Angreifer.

Gruss,

Johannes
 

Neue Beiträge

Zurück