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
 
Zurück