advanced
Sessions и cookies
Используйте server-side sessions или signed cookies с Secure, HttpOnly, SameSite, expiry, rotation, revocation и CSRF-aware request design.
Session-based auth хранит состояние на сервере по session ID в HttpOnly cookie. Браузер отправляет cookie автоматически на same-site запросах; сервер ищет сессию в Redis, БД или в signed encrypted cookies (stateless sessions).
res.cookie('sid', sessionId, {
httpOnly: true,
secure: true,
sameSite: 'lax',
maxAge: 3600_000,
path: '/',
});
async function loadSession(req, res, next) {
const sid = req.cookies.sid;
req.session = sid ? await store.get(sid) : null;
next();
}
Ротируйте session ID при повышении привилегий (login). Revocation — удаление записи на сервере. Для state-changing запросов при SameSite не Strict — CSRF protection.
На интервью: server-side sessions vs JWT в cookies; fixation и rotation; HttpOnly блокирует XSS theft, но не CSRF.
Типовые ошибки: большие объекты в cookies; session ID в URL; без TTL/idle timeout; session store как SPOF без HA.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- HttpOnly, Secure, осознанный SameSite.
- Server-side lookup с expiry и rotation.
- CSRF tokens или Strict SameSite для мутаций.
- Внешний session store для horizontal scale.