Обзор
Express.js использует cookie-файл для хранения идентификатора сеанса (с подписью шифрования) в браузере пользователя, а затем при последующих запросах использует значение этого cookie-файла для получения информации о сеансе, сохраненной всервер.Это серверное хранилище может быть хранилищем памяти (по умолчанию) или любым другим хранилищем, которое реализует требуемые методы (например, connect-redis ).
Подробно
Express.js/ Connect создает 24-символьную строку Base64 , используя utils.uid(24)
, и сохраняет ее в req.sessionID
.Затем эта строка используется в качестве значения в файле cookie.
Клиентская сторона
Подписанные файлы cookie всегда используются для сеансов, поэтому значение файла cookie будет иметь следующий формат.
[sid].[signature]
Где [sid] - идентификатор сессии, а [подпись] создается подписанием [sid] с использованием секретного ключа, предоставленного при инициализации промежуточного программного обеспечения сеанса.Шаг подписания делается для предотвращения взлома.В вычислительном отношении должно быть невозможно модифицировать [sid], а затем воссоздать [signature] без знания используемого секретного ключа.Сеансовый cookie все еще уязвим для кражи и повторного использования, если не требуется модификация [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
});
Вам также необходимо убедиться, что маршрутизатор (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.