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>