# Cookies

{% hint style="info" %}
Rendez-vous dans nos guides pour trouver un [guide complet](/docs/guides/docs-personalization-and-authentication/setting-up-adaptive-content.md) sur la configuration du contenu adaptatif avec les cookies.
{% endhint %}

{% hint style="warning" %}
L’utilisation du contenu adaptatif avec des indicateurs de fonctionnalité nécessite l’ajout de code à votre application.

Cette méthode fonctionne uniquement si votre site est servi sous un [domaine personnalisé](/docs/documentation/fr/docs-site/custom-domain.md).
{% endhint %}

Vous pouvez transmettre des données de visiteur à votre documentation via les cookies du navigateur de vos visiteurs. Voici un aperçu des différentes méthodes.

<table data-full-width="false"><thead><tr><th width="335.125">Méthode</th><th width="266.6015625">Cas d’utilisation</th><th width="206.58984375">Facilité de configuration</th><th width="202">Sécurité</th><th>Format</th></tr></thead><tbody><tr><td>Cookie signé <code>gitbook-visitor-token</code></td><td>Identifiants de test API, identification du client</td><td>Nécessite une signature et un domaine personnalisé</td><td><span data-gb-custom-inline data-tag="emoji" data-code="2705">✅</span> Les propriétés ne peuvent être définies que par le backend</td><td>JWT</td></tr><tr><td>Cookie public <code>gitbook-visitor-public</code></td><td>Indicateurs de fonctionnalité, rôles</td><td>Facile à configurer</td><td><span data-gb-custom-inline data-tag="emoji" data-code="274c">❌</span> Le visiteur peut remplacer les propriétés</td><td>JSON</td></tr></tbody></table>

### Cookie public

Pour transmettre des données à GitBook depuis un cookie public, vous devrez envoyer les données depuis votre application en définissant un cookie public `gitbook-visitor-public` .

Voici un simple exemple en JavaScript :

```javascript
import Cookies from 'js-cookie';

const cookieData = {
  isLoggedIn: true,
  isBetaUser: false,
};

Cookies.set('gitbook-visitor-public', JSON.stringify(cookieData), {
  secure: true,
  domain: '*.acme.org',
})
```

{% hint style="warning" %}
Les données transmises via des cookies publics doivent être définies dans votre schéma de visiteur via un [non signé](https://gitbook.com/docs/publishing-documentation/adaptive-content/enabling-adaptive-content#setting-unsigned-claims) objet.
{% endhint %}

### Cookie signé

Pour transmettre des données à GitBook de manière plus sécurisée, vous devrez envoyer les données sous forme de [jeton Web JSON](https://jwt.io/introduction) depuis votre application dans un cookie nommé `gitbook-visitor-token` lié à votre domaine.

Pour mettre cela en place, vous devrez adapter le flux de connexion de votre application pour inclure les étapes suivantes :

{% stepper %}
{% step %}
**Générer un JWT lorsque les utilisateurs se connectent à votre application**

Chaque fois qu’un utilisateur se connecte à votre produit, générez un JWT contenant certains attributs des informations de votre utilisateur authentifié.
{% endstep %}

{% step %}
**Signer le JWT à l’aide de la clé de signature des visiteurs du site**

Ensuite, assurez-vous de signer le JWT à l’aide de la **clé de signature des visiteurs**, que vous pouvez trouver dans les paramètres d’audience de votre site après avoir activé le contenu adaptatif.
{% endstep %}

{% step %}
**Stocker le JWT dans un cookie de session générique**

Enfin, vous devez stocker le JWT signé contenant les informations de votre utilisateur dans un cookie de session générique **sous le domaine de votre produit**.

Par exemple, si votre application est servie derrière le domaine `app.acme.org` le cookie devra être créé sous le `.acme.org` domaine générique.
{% endstep %}
{% endstepper %}

Voici un simple exemple en TypeScript :

```typescript
import * as jose from 'jose';

import { Request, Response } from 'express';

import { getUserInfo } from '../services/user-info-service';
import { getFeatureFlags } from '../services/feature-flags-service';

const GITBOOK_VISITOR_SIGNING_KEY = process.env.GITBOOK_VISITOR_SIGNING_KEY;
const GITBOOK_VISITOR_COOKIE_NAME = 'gitbook-visitor-token';


export async function handleAppLoginRequest(req: Request, res: Response) {
   // Votre logique métier pour gérer la requête de connexion
   // Par exemple, vérifier les identifiants et authentifier l’utilisateur
   //
   // par exemple :
   // const loggedInUser = await authenticateUser(req.body.username, req.body.password);

   // Après authentification de l’utilisateur, récupérez les informations utilisateur que vous souhaitez
   // transmettre à GitBook depuis votre base de données ou votre service utilisateur.
   const userInfo = await getUserInfo(loggedInUser.id);
      
   // Construire la charge utile du JWT avec les informations de l’utilisateur
   const gitbookVisitorClaims = {
       firstName: userInfo.firstName,
       lastName: userInfo.lastName,
       isBetaUser: userInfo.isBetaUser
       products: userInfo.products.map((product) => product.name),
       featureFlags: await getFeatureFlags({userId: loggedInUser.id})
   }
   
   // Générer un JWT signé à l’aide des revendications
   const gitbookVisitorJWT = await new jose.SignJWT(gitbookVisitorClaims)
     .setProtectedHeader({ alg: 'HS256' })
     .setIssuedAt()
     .setExpirationTime('2h') // expiration arbitraire de 2 heures
     .sign(GITBOOK_VISITOR_SIGNING_KEY);
     
  // Incluez un cookie `gitbook-visitor-token` contenant le JWT encodé dans votre
  // réponse du gestionnaire de connexion
  res.cookie(GITBOOK_VISITOR_COOKIE_NAME, gitbookVisitorJWT, {
     httpOnly: true,
     secure: process.env.NODE_ENV === 'production',
     maxAge: 2 * 60 * 60 * 1000, // expiration arbitraire de 2 heures
     domain: '.acme.org' //
  });
  
  // Reste de la logique de votre gestionnaire de connexion, y compris la redirection de l’utilisateur vers votre application
  res.redirect('/'); // Exemple de redirection
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gitbook.com/docs/documentation/fr/acces-au-site/adaptive-content/enabling-adaptive-content/cookies.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
