Donnerstag, 25 September 2025

Top 5 diese Woche

Ähnliche Tutorials

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>
Vorheriges Tutorial
Nächstes Tutorial

Hier etwas für dich dabei?