Page de connexion (login.php)
<?php
session_start();
if (isset($_SESSION['user_id'])) {
header('Location: dashboard.php');
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
require_once 'includes/db.php';
require_once 'includes/functions.php';
$email = trim($_POST['email']);
$password = $_POST['password'];
if (empty($email) || empty($password)) {
$_SESSION['error'] = 'Tous les champs sont obligatoires';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$_SESSION['error'] = 'Email invalide';
} else {
$stmt = $pdo->prepare("SELECT id, password FROM users WHERE email = ?");
$stmt->execute([$email]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
session_regenerate_id(true);
$_SESSION['user_id'] = $user['id'];
$_SESSION['last_activity'] = time();
header('Location: dashboard.php');
exit;
} else {
$_SESSION['error'] = 'Identifiants incorrects';
}
}
}
?>
Page d'inscription (register.php)
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
require_once 'includes/db.php';
require_once 'includes/functions.php';
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$password = $_POST['password'];
$confirm = $_POST['confirm_password'];
if (empty($name) || empty($email) || empty($password)) {
$_SESSION['error'] = 'Tous les champs sont obligatoires';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$_SESSION['error'] = 'Email invalide';
} elseif ($password !== $confirm) {
$_SESSION['error'] = 'Les mots de passe ne correspondent pas';
} elseif (strlen($password) < 8) {
$_SESSION['error'] = 'Le mot de passe doit faire 8 caractères minimum';
} else {
$stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
$stmt->execute([$email]);
if ($stmt->fetch()) {
$_SESSION['error'] = 'Cet email est déjà utilisé';
} else {
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO users (name, email, password) VALUES (?, ?, ?)");
$stmt->execute([$name, $email, $passwordHash]);
$_SESSION['user_id'] = $pdo->lastInsertId();
$_SESSION['success'] = 'Inscription réussie !';
header('Location: dashboard.php');
exit;
}
}
}
?>
Page protégée (dashboard.php)
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
$_SESSION['error'] = 'Vous devez être connecté';
header('Location: login.php');
exit;
}
$inactive = 1800;
if (isset($_SESSION['last_activity']) &&
time() - $_SESSION['last_activity'] > $inactive) {
session_unset();
session_destroy();
header('Location: login.php?timeout=1');
exit;
}
$_SESSION['last_activity'] = time();
require_once 'includes/db.php';
$stmt = $pdo->prepare("SELECT name, email FROM users WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);
$user = $stmt->fetch();
?>
Déconnexion (logout.php)
<?php
session_start();
$_SESSION = array();
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
session_destroy();
header('Location: login.php');
exit;
?>