Samstag, 10 Januar 2026

Diese Woche am beliebtesten

Vertiefendes Material

Login mit Remember Me

Dieser Codeschnipsel implementiert ein Login-System mit Session und Remember Me Funktion. Benutzer bleiben angemeldet, auch nach Schließen des Browsers.

<?php
session_start();
$mysqli = new mysqli("localhost", "root", "", "testdb");
if ($mysqli->connect_error) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}
if (!isset($_SESSION['user_id']) && isset($_COOKIE['rememberme'])) {
    list($user_id, $token) = explode(':', $_COOKIE['rememberme']);
    $stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ? AND remember_token = ?");
    $stmt->bind_param("is", $user_id, $token);
    $stmt->execute();
    $result = $stmt->get_result();
    if ($result->num_rows === 1) {
        $_SESSION['user_id'] = $user_id;
    } else {
        setcookie('rememberme', '', time() - 3600);
    }
}
$loginErr = "";
if (isset($_POST['login'])) {
    $email = $_POST['email'];
    $password = $_POST['password'];
    $stmt = $mysqli->prepare("SELECT id, password FROM users WHERE email = ?");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $result = $stmt->get_result();
    if ($result->num_rows === 1) {
        $user = $result->fetch_assoc();
        if (password_verify($password, $user['password'])) {
            $_SESSION['user_id'] = $user['id'];
            if (isset($_POST['remember'])) {
                $token = bin2hex(random_bytes(16));
                $stmt = $mysqli->prepare("UPDATE users SET remember_token = ? WHERE id = ?");
                $stmt->bind_param("si", $token, $user['id']);
                $stmt->execute();
                setcookie('rememberme', $user['id'] . ':' . $token, time() + 30*24*60*60, "/");
            }
            header("Location: " . $_SERVER['PHP_SELF']);
            exit;
        } else {
            $loginErr = "Falsches Passwort";
        }
    } else {
        $loginErr = "Benutzer nicht gefunden";
    }
}
if (isset($_GET['logout'])) {
    session_destroy();
    setcookie('rememberme', '', time() - 3600, "/");
    header("Location: " . $_SERVER['PHP_SELF']);
    exit;
}
$username = "";
if (isset($_SESSION['user_id'])) {
    $stmt = $mysqli->prepare("SELECT name FROM users WHERE id = ?");
    $stmt->bind_param("i", $_SESSION['user_id']);
    $stmt->execute();
    $result = $stmt->get_result();
    $username = $result->fetch_assoc()['name'];
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Login mit Remember-Me</title>
</head>
<body>
<h2>Login System</h2>
<?php if (isset($_SESSION['user_id'])): ?>
    <p>Willkommen, <?= htmlspecialchars($username) ?>!</p>
    <a href="?logout=1">Logout</a>
<?php else: ?>
    <?php if ($loginErr) echo "<p style='color:red;'>$loginErr</p>"; ?>
    <form method="post">
        <label>E-Mail:</label><br>
        <input type="text" name="email" required><br>
        <label>Passwort:</label><br>
        <input type="password" name="password" required><br>
        <label>
            <input type="checkbox" name="remember"> Angemeldet bleiben
        </label><br><br>
        <button type="submit" name="login">Login</button>
    </form>
<?php endif; ?>
</body>
</html>
Dreamcodes Redaktion
Dreamcodes Redaktion
Jeder auf Dreamcodes bereitgestellte Codeschnipsel sowie jede Tutorial Anleitung basiert auf geprüften Best Practices und fundierter Praxiserfahrung. Ziel ist es, ein belastbares technisches Fundament bereitzustellen und keine unausgereiften oder experimentellen Lösungen zu veröffentlichen. Die konkrete Nutzung, Integration, Anpassung und Absicherung der Inhalte obliegt jedoch dem Anwender. Vor dem produktiven Einsatz sind sämtliche Inhalte eigenverantwortlich zu prüfen, zu testen und gegebenenfalls abzusichern. Dreamcodes stellt die technische Grundlage zur Verfügung, die finale Umsetzung und Verantwortung verbleibt beim Nutzer.
Vorheriges Tutorial
Nächstes Tutorial

Vielleicht einen Blick WERT?