L’utilisation des cookies en javascript est à la fois simple et compliquée.
On aimerait une interface d’API un peu plus directe, pour pouvoir juste ajouter/modifier/supprimer un cookie.
Voici un exemple d’implémentation d’une telle API, en javascript puis en typescript.
Version javascript :
//cookie.js
export const ONE_DAY_IN_SECONDS = 24 * 60 * 60 * 1000;
export const SEVEN_DAYS_IN_SECONDS = 7 * ONE_DAY_IN_SECONDS;
/**
* @param {string} name
* @param {string} value
* @param {number} expirationDuration Durée en secondes, ou -1 pour que le cookie soit supprimé à la fermeture de la page.
*/
export function setCookie(name, value, expirationDuration = SEVEN_DAYS_IN_SECONDS) {
const date = new Date();
date.setTime(date.getTime() + expirationDuration);
const expirationPart = expirationDuration > 0
? ` expires=${date.toUTCString()};`
: '';
document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)};${expirationPart}path=/`;
}
/**
* @param {string} name
* @param {string|null} defaultValue
*
* @return {string|null}
*/
export function getCookie(name, defaultValue = null) {
const encodedCookie = document.cookie
.split('; ')
.find((cookie) => cookie.startsWith(encodeURIComponent(name) + '='))
?.split('=')?.[1];
return encodedCookie !== undefined ? decodeURIComponent(encodedCookie) : defaultValue;
}
/**
* @param {string} name
*/
export function deleteCookie(name) {
const expirationDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');
document.cookie = `${encodeURIComponent(name)}=; expires=${expirationDate.toUTCString()}; path=/`;
}
Version typescript :
//cookie.ts
export const ONE_DAY_IN_SECONDS = 24 * 60 * 60 * 1000;
export const SEVEN_DAYS_IN_SECONDS = 7 * ONE_DAY_IN_SECONDS;
/**
* @param {number} expirationDuration Durée en secondes, ou -1 pour que le cookie soit supprimé à la fermeture de la page.
*/
export const setCookie = (name: string, value: string, expirationDuration: number = SEVEN_DAYS_IN_SECONDS) => {
const date = new Date();
date.setTime(date.getTime() + expirationDuration);
const expirationPart = expirationDuration > 0
? ` expires=${date.toUTCString()};`
: '';
document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)};${expirationPart}path=/`;
};
export const getCookie = (name: string, defaultValue: string | null = null) => {
const encodedCookie = document.cookie
.split('; ')
.find((cookie) => cookie.startsWith(encodeURIComponent(name) + '='))
?.split('=')?.[1];
return encodedCookie !== undefined ? decodeURIComponent(encodedCookie) : defaultValue;
};
export const deleteCookie = (name: string) => {
const expirationDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');
document.cookie = `${encodeURIComponent(name)}=; expires=${expirationDate.toUTCString()}; path=/`;
};