Огляд
Express.js використовує файл cookie для зберігання ідентифікатора сеансу (з підписом шифрування) у браузері користувача, а потім при подальших запитах використовує значення цього файлу cookie для отримання інформації про сеанс, що зберігається на сервері. Це сховище на стороні сервера може бути сховищем пам'яті (за замовчуванням) або будь-яким іншим сховищем, яке реалізує необхідні методи (наприклад, connect-redis ).
Деталі
Express.js / Connect створює 24-символьний рядок Base64 за допомогою utils.uid(24)
і зберігає його в req.sessionID
. Потім цей рядок використовується як значення в файлі cookie.
Сторона клієнта
Підписані файли cookie завжди використовуються для сеансів, тому значення файлів cookie матиме такий формат.
[sid].[signature]
Якщо [sid] - сесійний ідентифікатор, а [підпис] генерується підписом [sid] за допомогою секретного ключа, наданого при ініціалізації проміжного програмного забезпечення сесії. Крок підписання робиться для запобігання фальсифікації. Це повинно бути обчислювальним способом модифікувати [sid], а потім відтворити [підпис] без знання використовуваного секретного ключа. 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.