Обзор
Express.js использует файл cookie для хранения идентификатора сеанса (с подписью шифрования) в браузере пользователя, а затем, при последующих запросах, использует значение этого файла cookie для получения информации о сеансе, хранящейся на сервере. Это хранилище на стороне сервера может быть хранилищем памяти (по умолчанию) или любым другим хранилищем, которое реализует необходимые методы (например, connect-redis ).
подробности
Express.js / Connect создает 24-символьную строку Base64, используя utils.uid(24)
и сохраняет ее в req.sessionID
. Эта строка затем используется как значение в файле cookie.
Сторона клиента
Подписанные файлы cookie всегда используются для сеансов, поэтому значение файла cookie будет иметь следующий формат.
[sid].[signature]
Где [sid] - это идентификатор сеанса, а [подпись] создается путем подписания [sid] с использованием секретного ключа, предоставленного при инициализации промежуточного программного обеспечения сеанса. Шаг подписи выполняется для предотвращения взлома. Изменение [sid] и повторное создание [подписи] без знания используемого секретного ключа должно быть вычислительно недопустимым. Сеансовые куки по-прежнему уязвимы для кражи и повторного использования, если не требуется изменение [sid].
Имя этого файла cookie
connect.sid
Сторона сервера
Если обработчик происходит после того , как cookieParser
и session
промежуточному он будет иметь доступ к переменной req.cookies
. Он содержит объект JSON, ключи которого являются ключами файлов cookie, а значения - значениями файлов cookie. Он будет содержать именованный ключ, connect.sid
а его значение будет подписанным идентификатором сеанса.
Вот пример того, как настроить маршрут, который будет проверять наличие файла cookie сеанса при каждом запросе и выводить его значение на консоль.
app.get("/*", function(req, res, next) {
if(typeof req.cookies['connect.sid'] !== 'undefined') {
console.log(req.cookies['connect.sid']);
}
next(); // Call the next middleware
});
Вам также необходимо убедиться, что router ( app.use(app.router)
) включен после cookieParser
и session
в ваш раздел конфигурации.
Ниже приведен пример данных, хранящихся внутри Express.js / Connect.
{
"lastAccess": 1343846924959,
"cookie": {
"originalMaxAge": 172800000,
"expires": "2012-08-03T18:48:45.144Z",
"httpOnly": true,
"path": "/"
},
"user": {
"name":"waylon",
"status":"pro"
}
}
user
Поле обычай. Все остальное - часть управления сеансом.
Пример взят из Express 2.5.
Попробуйте взглянуть на этот ответ и другие материалы вики .
Да, обычно это файл cookie с назначенным идентификатором сеанса, который должен быть подписан секретом, чтобы предотвратить подделку.
Вы не должны связываться с cookie сеанса на стороне клиента. Если вы хотите работать с сеансами на стороне сервера, вам следует проверить связанный express.js и подключить документы.
источник
В дополнение к уже отличным ответам, вот 2 диаграммы, которые я создал, чтобы объяснить сеансы Express, их связь с файлами cookie и хранилище:
источник