FR EN

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 (symétrique pour acceptation et refus)
  • Valeur : JSON encodé en URL

Safari, comme certains navigateurs axés sur la vie privée, limite la durée de vie des témoins écrits par JavaScript (7 jours ou moins). Sur ces navigateurs, la bannière peut redemander le consentement avant la fin de la durée prévue (183 jours). La bannière réécrit le témoin à chaque visite, avec son échéance d'origine : une personne qui revient avant la limite du navigateur conserve son choix.

{
  "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
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.
}
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 httpOnly strictement nécessaire (ex. : session d'authentification) est acceptable ; un témoin httpOnly analytique ou marketing émis avant l'accord défait le choix que la bannière recueille.

Note Loi 25. Un consentement doit être manifeste, libre, éclairé et donné à des fins spécifiques, et il est demandé à chacune de ces fins (P-39.1, art. 14 al. 1 ; A-2.1, art. 53.1 al. 1). Si vous recourez à une technologie comprenant des fonctions permettant d'identifier, de localiser ou de profiler la personne, vous devez au préalable l'en informer, ainsi que des moyens offerts pour activer ces fonctions (P-39.1, art. 8.1 ; A-2.1, art. 65.0.1). Lire le témoin agreely_consent côté serveur est la façon 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.