Côté serveur
La limite honnête
JavaScript ne peut pas lire ni supprimer les témoins httpOnly. Il ne peut
pas non plus empêcher votre serveur d'émettre un en-tête Set-Cookie. La
bannière Agreely ne prétend jamais le contraire. Si votre application émet des
témoins côté serveur, le traitement de ces témoins est votre responsabilité, et
la bannière ne peut pas s'y substituer.
La bonne approche : lisez le témoin de première partie agreely_consent côté
serveur avant tout traitement ou avant d'émettre un Set-Cookie non essentiel.
Le témoin agreely_consent
La bannière émet un témoin de première partie appelé agreely_consent :
SameSite=Lax,Secure(sur HTTPS),Path=/Max-Age: 183 jours par défaut (symétrique pour acceptation et refus)- Valeur : JSON encodé en URL
{
"v": 1,
"consentId": "550e8400-e29b-41d4-a716-446655440000",
"decisions": {
"analytics": false,
"marketing": false,
"functional": false
},
"configVersion": 3,
"ts": 1721390400,
"locale": "fr"
}
La clé decisions contient les fins non essentielles de votre site web avec la
valeur true (accordé) ou false (refusé ou non octroyé). L'absence du témoin
signifie qu'aucune décision n'a été prise : traitez-la comme un refus.
PHP : lire le consentement avant un Set-Cookie
<?php
function agrConsentDecision(string $purpose): bool
{
$raw = $_COOKIE['agreely_consent'] ?? null;
if ($raw === null) {
return false; // pas de décision = refus
}
$data = json_decode(urldecode($raw), true);
return ($data['decisions'][$purpose] ?? false) === true;
}
// Avant d'émettre un témoin analytique :
if (agrConsentDecision('analytics')) {
setcookie('_ga_custom', $value, [
'expires' => time() + 63072000,
'path' => '/',
'secure' => true,
'httponly' => false,
'samesite' => 'Lax',
]);
}
// Avant une session de suivi marketing :
if (agrConsentDecision('marketing')) {
// charger pixel, tracker, etc.
}
Node.js / Express : lire le consentement avant un Set-Cookie
import cookieParser from 'cookie-parser';
function agrConsent(req, purpose) {
const raw = req.cookies?.agreely_consent;
if (!raw) return false;
try {
const data = JSON.parse(decodeURIComponent(raw));
return data?.decisions?.[purpose] === true;
} catch {
return false;
}
}
// Middleware Express
app.use(cookieParser());
app.get('/track', (req, res) => {
if (!agrConsent(req, 'analytics')) {
return res.status(204).end(); // refus : pas de traceur
}
res.cookie('_mytracker', sessionId, {
maxAge: 63072000 * 1000,
httpOnly: false,
secure: true,
sameSite: 'lax',
});
// continuer avec le traceur
});
Bonnes pratiques
- Traitez l'absence du témoin comme un refus. Un utilisateur dont le témoin a expiré ou qui n'a pas encore interagi avec la bannière n'a pas consenti.
- Ne décomposez pas la logique de consentement par session. Lisez le témoin à chaque requête pertinente plutôt que de mettre en cache la décision en mémoire de session, car le visiteur peut retirer son consentement sur un autre onglet.
- Ne créez pas de témoins de session de suivi httpOnly avant la décision.
Même un témoin
httpOnlystrictement nécessaire (ex. : session d'authentification) est acceptable ; un témoinhttpOnlyanalytique ou marketing émis avant l'accord est une non-conformité.
Note Loi 25. L'article 14 de la Loi 25 exige que le consentement soit manifeste, libre et éclairé, et demandé pour chacune des fins. Lire le témoin
agreely_consentcôté serveur est la façon correcte de respecter la décision de la personne pour vos témoins émis par le serveur. Agreely vous aide à documenter et à démontrer votre démarche ; vous demeurez responsable de la validité juridique du consentement pour vos propres fins.