Перейти к содержанию

Cookie

Cookie-файлы позволяют сохранять на стороне клиента некоторые данные в течении заданного интервала времени, которые при смене страницы или повторном заходе на сайт помогают идентифицировать пользователя и, например, помогают восстановить состояние предыдущей сессии.

Несмотря на то, что сегодня существует достаточно хорошо зарекомендовавшая себя альтернатива в виде локального хранилища (Local Storage), cookie-файлы все еще широко распространены и играют в Интернете важную роль.

Особенности cookie-файлов:

  • содержимое полностью открыто и доступно клиенту для просмотра;
  • файлы могут быть удалены клиентом, либо заблокированы клиентом в любой момент;
  • часто cookie-файлы подделываются злоумышленниками или используются для XSS-атак.

В Node.js cookie управляются двумя методами объекта ответа:

  • cookie() - устанавливает значение по ключу;
  • clearCookie() - удаляет по заданному ключу значение у клиента, если ключ не задан - удаляет все.

Но для работы с ними сперва необходимо установить модуль cookie-parser, который предоставляет функцию промежуточной обработки для корректной работы cookie в Express.

1
npm install cookie-parser

Теперь рассмотрим пример использования в Node.js cookie.

app.js

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
const express = require('express'),
    app = express(),
    cookieParser = require('cookie-parser');

const host = '127.0.0.1';
const port = 7000;

app.use(cookieParser('secret key'));

app.get('/get-cookie', (req, res) => {
    console.log('Cookie: ', req.cookies);
    res.send('Get Cookie');
});

app.get('/set-cookie', (req, res) => {
    res.cookie('token', '12345ABCDE');
    res.send('Set Cookie');
});

app.listen(port, host, () =>
    console.log(`Server listens http://${host}:${port}`)
);

Первым параметром функции промежуточной обработки cookie-parser передается секретный ключ, который используется в целях безопасности для шифрования значений файлов перед их отправкой клиенту. Для получения значений cookie с клиента необходимо обратиться к одноименному свойству объекта запроса.

Во время задания значения файла методу cookie() необязательным третьим параметром можно передать объект настроек со следующими свойствами:

  • domain - управляет поддоменами, на которых могут использоваться cookie;
  • path - описание маршрута, на который распространяется действие cookie;
  • maxAge - определяет время жизни файла в миллисекундах;
  • secure - булевое значение, если true, то файлы будут отправляться только по протоколу HTTPS;
  • httpOnly - булевое значение, установка в true означает, что файлы будут изменяться только сервером;
  • signed - булевое значение, если true, то cookie-файл будет подписан.
1
2
3
4
res.cookie('token', '12345ABCDE', {
    maxAge: 3600 * 24,
    secure: true,
});

Подписанные cookie-файлы каждый раз при их чтении проверяются на внесение в них клиентом изменений и если изменения были внесены - сгенерируется ошибка.