Permettez-moi de répéter cette partie de la question dont les réponses ici ignorent:
Cela peut-il être fait en quelques lignes de code, sans avoir besoin de tirer une bibliothèque tierce?
Lire les cookies
Les cookies sont lus à partir des demandes avec l'en- Cookietête. Ils incluent uniquement un nameet value. En raison du fonctionnement des chemins, plusieurs cookies du même nom peuvent être envoyés. Dans NodeJS, tous les cookies sont en une seule chaîne lorsqu'ils sont envoyés dans l'en- Cookietête. Vous les avez séparés ;. Une fois que vous avez un cookie, tout ce qui se trouve à gauche de l'égal (si présent) est le name, et tout ce qui suit est le value. Certains navigateurs acceptent un cookie sans signe égal et présument que le nom est vide. Les espaces ne comptent pas comme faisant partie du cookie. Les valeurs peuvent également être placées entre guillemets ( "). Les valeurs peuvent également contenir =. Par exemple, formula=5+3=8est un cookie valide.
/**
 * @param {string} [cookieString='']
 * @return {[string,string][]} String Tuple
 */
function getEntriesFromCookie(cookieString = '') {
  return cookieString.split(';').map((pair) => {
    const indexOfEquals = pair.indexOf('=');
    let name;
    let value;
    if (indexOfEquals === -1) {
      name = '';
      value = pair.trim();
    } else {
      name = pair.substr(0, indexOfEquals).trim();
      value = pair.substr(indexOfEquals + 1).trim();
    }
    const firstQuote = value.indexOf('"');
    const lastQuote = value.lastIndexOf('"');
    if (firstQuote !== -1 && lastQuote !== -1) {
      value = value.substring(firstQuote + 1, lastQuote);
    }
    return [name, value];
  });
}
const cookieEntries = getEntriesFromCookie(request.headers.Cookie); 
const object = Object.fromEntries(cookieEntries.slice().reverse());
Si vous n'attendez pas de noms dupliqués, vous pouvez convertir en un objet, ce qui facilite les choses. Ensuite, vous pouvez accéder à comme object.myCookieNamepour obtenir la valeur. Si vous prévoyez des doublons, vous souhaitez effectuer une itération cookieEntries. Les navigateurs alimentent les cookies par ordre de priorité décroissante, donc l'inversion garantit que le cookie de priorité la plus élevée apparaît dans l'objet. (Le but .slice()est d'éviter la mutation du tableau.)
Cookies de paramètres
"L'écriture" des cookies se fait en utilisant l'en- Set-Cookietête dans votre réponse. L' response.headers['Set-Cookie']objet est en fait un tableau, vous y pousserez donc. Il accepte une chaîne mais a plus de valeurs que juste nameet value. Le plus difficile est d'écrire la chaîne, mais cela peut être fait en une seule ligne.
/**
 * @param {Object} options
 * @param {string} [options.name='']
 * @param {string} [options.value='']
 * @param {Date} [options.expires]
 * @param {number} [options.maxAge]
 * @param {string} [options.domain]
 * @param {string} [options.path]
 * @param {boolean} [options.secure]
 * @param {boolean} [options.httpOnly]
 * @param {'Strict'|'Lax'|'None'} [options.sameSite]
 * @return {string}
 */
function createSetCookie(options) {
  return (`${options.name || ''}=${options.value || ''}`)
    + (options.expires != null ? `; Expires=${options.expires.toUTCString()}` : '')
    + (options.maxAge != null ? `; Max-Age=${options.maxAge}` : '')
    + (options.domain != null ? `; Domain=${options.domain}` : '')
    + (options.path != null ? `; Path=${options.path}` : '')
    + (options.secure ? '; Secure' : '')
    + (options.httpOnly ? '; HttpOnly' : '')
    + (options.sameSite != null ? `; SameSite=${options.sameSite}` : '');
}
const newCookie = createSetCookie({
  name: 'cookieName',
  value: 'cookieValue',
  path:'/',
});
response.headers['Set-Cookie'].push(newCookie);
N'oubliez pas que vous pouvez définir plusieurs cookies, car vous pouvez en fait définir plusieurs en- Set-Cookietêtes dans votre demande. C'est pourquoi c'est un tableau.
Remarque sur les bibliothèques externes:
Si vous décidez d'utiliser le express,, cookie-parserou cookie, notez que leurs valeurs par défaut ne sont pas standard. Les cookies analysés sont toujours décodés par URI (décodés en pourcentage). Cela signifie que si vous utilisez un nom ou une valeur !#$%&'()*+/:<=>?@[]^`{|}contenant l' un des caractères suivants: ils seront traités différemment avec ces bibliothèques. Si vous définissez des cookies, ils sont encodés avec%{HEX} . Et si vous lisez un cookie, vous devez le décoder.
Par exemple, tant que email=name@domain.comest un cookie valide, ces bibliothèques l'encoderont comme email=name%40domain.com. Le décodage peut présenter des problèmes si vous utilisez le %dans votre cookie. Ça va être mutilé. Par exemple, votre cookie qui était: secretagentlevel=50%007and50%006devient secretagentlevel=507and506. C'est un cas limite, mais quelque chose à noter en cas de changement de bibliothèque.
De plus, sur ces bibliothèques, les cookies sont définis par défaut, path=/ce qui signifie qu'ils sont envoyés à chaque demande d'URL à l'hôte.
Si vous souhaitez encoder ou décoder ces valeurs vous-même, vous pouvez utiliser respectivement encodeURIComponentou decodeURIComponent.
Références:
Information additionnelle:
               
              
=signe égal ( ) comme dans l'un des cookies de Facebook commefbm_1234123412341234=base_domain=.domain.com.