- oidc/start.php : arrêt immédiat (500) si session_start() échoue, évite
un flux OIDC condamné à l'échec silencieux (ex. session.save_path absent)
- oidc/callback.php : même garde + error_log sur échec du contrôle de state
pour faciliter le diagnostic (STATE absent/présent + session_id)
- consignes.md : règle PHP-FPM — toujours user=www-data, pas le compte admin
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contexte : sur abonnel.fr, session_start() était appelé sur chaque
requête PHP (y compris bots), créant ~17 000 fichiers de session/jour
dans un répertoire custom non nettoyé par le cron Debian. Les workers
PHP-FPM grossissaient en mémoire et le pool saturait (1 188 erreurs
503 en 30 minutes).
Changements :
public/index.php
- session_start() uniquement si le cookie de session existe déjà ou si
la requête est POST. Les bots (GET sans cookie) ne créent plus de
session.
- CSRF commentaires migré de $_SESSION['comment_csrf'] vers un double-
submit cookie (_csrf_c, SameSite=Strict, HttpOnly). La session n'est
plus requise pour les visiteurs anonymes qui postent un commentaire.
templates/comments_section.php
- Génère le token CSRF et le pose en cookie (_csrf_c) au lieu de
l'écrire en session.
public/.htaccess
- Règle Apache 410 Gone pour toute URL contenant un paramètre ?do=
(anciens paramètres DokuWiki : do=media, do=export_pdf…). Traité par
Apache en 2ms sans toucher PHP-FPM.
public/oidc/{start,callback,me}.php
- Correction du bug introduit par 0b8077e : config.php (qui utilise
BASE_PATH) était chargé avant bootstrap.php (qui définit BASE_PATH).
Fix : define('BASE_PATH', …) ajouté avant le require config.php.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ArticleManager::getSearchIndex() : rebuild automatique si un UUID
référencé dans search_index.json n'existe plus sur le disque (article
supprimé hors CMS via rsync ou suppression manuelle). Même logique que
getBySlug() qui nettoie déjà le slug_index à la volée.
- bootstrap.php : lire SESSION_NAME depuis $_ENV avant session_start(),
permettant de personnaliser le nom du cookie de session via le .env.
- oidc/{start,callback,me}.php : inverser l'ordre des require pour charger
config.php (dotenv) avant bootstrap.php, condition nécessaire pour que
SESSION_NAME soit disponible au démarrage de la session.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>