PHP-SESSIONS, COOKIES und Remember Me Funktion

Ich habe den folgenden code, wenn ein Benutzer anmeldet, erhalten Sie zwei Textfelder und eine checkbox.

Einstellung der drei cookies username, password und remember alle arbeiten und die log-in-Skript selbst ist comepletely in Ordnung (ich Schätze, dass die Speicherung von Hash-Passwörter im cookie ist nicht best practice, aber für jetzt, es zu tun).

Was passiert, ist id die Benutzer-re-Besuche die login.php Seite (diese hier), während Sie bereits angemeldet sind die cookies entfernt werden, one-by-one wie die $_POST-Bedingung ist nicht erfüllt und daher die folgenden Zeilen ausgeführt werden. Wie kann ich verhindern, dass dies geschieht. Auch Anregungen, um den code bereinigen, so werde ich ohne Zweifel am Ende mit einer Menge von wiederholten code wird geschätzt. Dank

snippet from the 'login.php' page below

} elseif (!$_POST['remember']) {
    $past = time() - 100;
    if (isset($_COOKIE['remember'])) {
        setcookie('remember', '', $past);
    } elseif (isset($_COOKIE['username'])) {
        setcookie('username', '', $past);
    } elseif (isset($_COOKIE['password'])) {
        setcookie('password', '', $past);
    }
}

login.php

<?php
session_start();
include("includes/config.php");

?>
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
<?php

$odb = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USER, DB_PASS);

$username = "";
$password = "";

if (isset($_COOKIE['username']) && isset($_COOKIE['password'])) {

    $username = $_COOKIE['username'];
    $password = $_COOKIE['password'];

} elseif (isset($_POST['username'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];
    $password = md5(DB_SALT.$password);

}

$sql = "SELECT * from tblMembers WHERE username = :username";
$query = $odb->prepare($sql);
$query->execute(array(":username" => $username));
$results = $query->fetchAll();
if($results !== FALSE && $query->rowCount()>0) {
    if($results[0]['passwordHash'] == $password) {
        $_SESSION['username'] = $username;
        $_SESSION['userID'] = $results[0]['userID'];

        if($_POST['remember']) {
            $month = time() + (60 * 60 * 24 * 30);
            setcookie('remember', $_POST['username'], $month);
            setcookie('username', $_POST['username'], $month);
            setcookie('password', $results[0]['passwordHash'], $month);
        } elseif (!$_POST['remember']) {
            $past = time() - 100;
            if (isset($_COOKIE['remember'])) {
                setcookie('remember', '', $past);
            } elseif (isset($_COOKIE['username'])) {
                setcookie('username', '', $past);
            } elseif (isset($_COOKIE['password'])) {
                setcookie('password', '', $past);
            }
        }


        header("Location: "."index.php");
    } else {
        echo "password incorrect";
    }
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
Username:&nbsp;
<?php
if(isset($_COOKIE['username'])) {
    echo "<input type=\"text\" id=\"username\" name=\"username\" maxlength=\"40\" value=".$_COOKIE['username'].">";
} else {
    echo "<input type=\"text\" id=\"username\" name=\"username\" maxlength=\"40\" value=\"\">";
}
?>
Password:&nbsp;<input type="password" id="password" name="password" maxlength="50">
Remember Me:&nbsp;
<?php
if(isset($_COOKIE['remember'])) {
    echo "<input type=\"checkbox\" id=\"remember\" name=\"remember\" checked=\"checked\">";
} else {
    echo "<input type=\"checkbox\" id=\"remember\" name=\"remember\">";
}
?>
<input type="submit" id="submit" name="submit" value="Log In">
</form>
</body>
</html>
  • Wie dieser cookie-Frage ist mit mysql und PDO?
  • Denn es enthält MySQL-und PDO-code, alle anderen Klassen, die ich habe sind im Zusammenhang mit diesem also habe ich gedacht, dass, wenn ich erreichen, um mehr Menschen dann bekomme ich eine maßgeschneiderte Antwort in Bezug auf das, was ich erzielen möchte.
InformationsquelleAutor Mike | 2013-02-26
Schreibe einen Kommentar