Cookies

Les cookies sont un espace de stockage local.

Il existe 3 type de stockages :

Ce que dit la loi

Les cookies doivent être optionnels quand ces derniers ne sont pas requis. De ce fait, des cookies pour se connecter ne peuvent pas être refusés, mais par exemple les cookies publicitaires, doivent être optionnels.

Utilisation

Les cookies permettent :

  • de tracer un utilisateur
  • de personnaliser les publicitĂ©s d’un utilisateur

Stockages

Le navigateur offre plusieurs mécanismes pour stocker des données localement, permettant ainsi de personnaliser l’expérience utilisateur et de conserver certaines informations entre différentes visites. Parmi ces mécanismes, les cookies sont les plus connus, mais il existe d’autres options plus modernes et flexibles.

Stockage de session

Le stockage de session est une zone de mémoire temporaire allouée à chaque onglet ou fenêtre du navigateur. Les données stockées dans le sessionStorage sont accessibles uniquement pendant la durée de la session de navigation en cours, c’est-à-dire tant que l’onglet ou la fenêtre reste ouvert. À la fermeture de celle-ci, les données sont automatiquement effacées.

Utilisations typiques :

  • États temporaires d’une application web : Par exemple, pour mĂ©moriser les choix d’un utilisateur au cours d’une session sans avoir Ă  les renvoyer Ă  chaque requĂŞte au serveur.
  • Panier d’achat : Le contenu du panier est gĂ©nĂ©ralement stockĂ© en sessionStorage pour ĂŞtre accessible tout au long de la navigation de l’utilisateur sur le site d’e-commerce.

Stockage local

Le stockage local offre une persistance plus longue que le stockage de session. Les données stockées dans le localStorage sont conservées sur l’appareil de l’utilisateur, même après la fermeture du navigateur, et ce, jusqu’à ce qu’elles soient supprimées explicitement ou par l’utilisateur lui-même.

Utilisations typiques :

  • PrĂ©fĂ©rence utilisateur : Les paramètres de personnalisation d’un site (thème, langue, etc.) peuvent ĂŞtre enregistrĂ©s en localStorage pour ĂŞtre restaurĂ©s lors de la prochaine visite.
  • DonnĂ©es d’authentification : Certaines applications peuvent stocker des jetons d’authentification en localStorage pour Ă©viter de demander Ă  l’utilisateur de se reconnecter Ă  chaque fois.

Stockage de cookies

Les cookies sont de petits fichiers texte stockés sur l’appareil de l’utilisateur par le navigateur web. Ils sont envoyés par un serveur web et renvoyés à chaque requête subséquente, permettant ainsi aux serveurs de “se souvenir” d’informations spécifiques à l’utilisateur, comme ses préférences ou le contenu de son panier d’achat.

Un cookie est généralement composé de plusieurs éléments :

  • Nom : Un identifiant unique qui permet d’identifier le cookie.
  • Valeur : Les donnĂ©es associĂ©es au cookie, sous forme de chaĂ®ne de caractères.
  • Domaine : Le domaine pour lequel le cookie est valide.
  • Chemin : Le rĂ©pertoire du site pour lequel le cookie est valide.
  • DurĂ©e de vie : La durĂ©e pendant laquelle le cookie sera conservĂ© sur l’appareil de l’utilisateur (en secondes, minutes, heures, jours, etc.).
  • SĂ©curité : Indique si le cookie doit ĂŞtre transmis uniquement sur une connexion sĂ©curisĂ©e (HTTPS).

Définir des cookies

Pour définir un cookie, on utilise généralement des méthodes fournies par l’objet document en JavaScript. Par exemple, pour créer un cookie nommé monCookie avec la valeur maValeur et une durée de vie de 1 jour :

document.cookie = "monCookie=maValeur; expires=" + new Date(Date.now() + 86400000).toUTCString();

Utiliser express-session et cookie-session

Dans le contexte de Node.js et du framework Express, les modules express-session et cookie-session sont couramment utilisés pour gérer les sessions utilisateur.

express-session

  • Principe : Stocke les donnĂ©es de session sur le serveur et envoie uniquement un identifiant de session (session ID) dans un cookie.
  • Avantages : Plus sĂ©curisĂ©, car les donnĂ©es sensibles ne sont pas exposĂ©es dans le cookie.
  • InconvĂ©nients : NĂ©cessite une gestion supplĂ©mentaire des sessions sur le serveur.

Exemple :

const express = require('express');
const session = require('express-session');
 
const app = express();
 
app.use(session({
  secret: 'votre_clé_secrète',
  resave: false,
  saveUninitialized: false
}));
 
app.get('/', (req, res) => {
  if (req.session.user) {
    res.send(`Bienvenue, ${req.session.user}!`);
  } else {
    req.session.user = 'John Doe';
    res.send('Vous êtes connecté en tant que John Doe.');
  }
});
  • Principe : Stocke directement les donnĂ©es de session dans le cookie.
  • Avantages : Simple Ă  mettre en Ĺ“uvre.
  • InconvĂ©nients : Moins sĂ©curisĂ©, car les donnĂ©es sont directement exposĂ©es dans le cookie.

Exemple:

const express = require('express');
const cookieSession = require('cookie-session');
 
const app = express();
 
app.use(cookieSession({
  name: 'session',
  keys: ['clé1', 'clé2']
}));
 
app.get('/', (req, res) => {
  if (req.session.user) {
    res.send(`Bienvenue, ${req.session.user}!`);
  } else {
    req.session.user = 'John Doe';
    res.send('Vous êtes connecté en tant que John Doe.');
  }
});

Le choix entre express-session et cookie-session dépend de plusieurs facteurs :

  • SĂ©curité : Si la sĂ©curitĂ© est une prioritĂ©, express-session est gĂ©nĂ©ralement prĂ©fĂ©rable.
  • Complexité : Si vous souhaitez une solution simple et rapide Ă  mettre en Ĺ“uvre, cookie-session peut ĂŞtre un bon choix.
  • Volume de donnĂ©es : Pour de grandes quantitĂ©s de donnĂ©es, express-session est plus adaptĂ©.

Cross-origin Resource Sharing (CORS)

Les CORS sont un mécanisme de sécurité qui permet à un navigateur d’accéder à des ressources (comme des images, des feuilles de style, des scripts, etc.) d’un domaine différent de celui à partir duquel la page a été chargée. Cela est particulièrement utile pour les applications web modernes qui font appel à des API externes ou à des composants d’autres domaines.

Sans CORS, la politique de même origine (Same-Origin Policy) empêcherait les navigateurs d’effectuer des requêtes vers des domaines différents, ce qui limiterait considérablement les fonctionnalités des applications web.

Cas d’utilisation des CORS

  • API REST: Consommer des API REST externes pour rĂ©cupĂ©rer des donnĂ©es.
  • IntĂ©gration de services tiers : IntĂ©grer des services comme Google Maps, Facebook, etc.
  • DĂ©veloppement d’applications monopage (SPA): Les SPA font souvent appel Ă  des API pour rĂ©cupĂ©rer des donnĂ©es dynamiquement.

Problèmes courants liés aux CORS

  • Blocage des requĂŞtes : Si le serveur ne configure pas correctement les en-tĂŞtes CORS, le navigateur bloquera la requĂŞte.
  • Erreurs de prĂ©flight: Des erreurs peuvent survenir lors de la requĂŞte OPTIONS si les paramètres ne sont pas correctement dĂ©finis.
  • SĂ©curité : Il est important de configurer correctement les CORS pour Ă©viter les problèmes de sĂ©curitĂ©.

Configurer les CORS sur Express

La configuration des CORS se fait généralement côté serveur. Voici un exemple de configuration basique avec Express.js :

const express = require('express');
const cors = require('cors');
 
const app = express();
 
app.use(cors({
  // Autoriser uniquement les requĂŞtes provenant de https://exemple.com
  origin: 'https://exemple.com', 
  // Autoriser les méthodes GET, POST, PUT et DELETE
  methods: 'GET, POST, PUT, DELETE', 
  // Autoriser les en-tĂŞtes Content-Type et Authorization
  allowedHeaders: ['Content-Type', 'Authorization'], 
}));
 
// ...