Я использую Экспресс-сессия cookie для аутентификации, которая, если я правильно понимаю, работает путем сохранения файла cookie локально в браузере пользователя и данных сеанса нет на стороне клиента.
В документации сказано, что для выхода из системы мы должны установить req.session = null
на сервере. Итак, прямо сейчас мой клиент выполняет HTTP-запрос к этой конечной точке.
Клиент:
async function logout() {
await fetch(
process.env.REACT_APP_SERVER_URL + "/logout",
{
method: "POST",
}
)
}
Сервер:
exports.logout = (req, res, next) => {
req.session = null
res.sendStatus(200)
}
Но это, очевидно, может потерпеть неудачу, если сервер не работает. Так что теперь мне интересно, хватит ли просто удалите файл cookie сеанса на стороне клиента и даже полностью удалите конечную точку выхода. Если на сервере не хранятся данные сеанса, это должно работать так же хорошо и не оставлять следов, верно?
🤔 А знаете ли вы, что...
С Node.js легко создавать масштабируемые сетевые приложения и веб-серверы.
Да, это правильно, вы можете просто удалить файл cookie, и в следующий раз, когда клиент попадет на сервер, не будет сеанса для идентификации пользователя, поэтому пользователь выйдет из системы.
Однако, как правило, клиентская сторона не должна иметь возможности работать с файлом cookie сеанса из соображений безопасности, и почти всегда файл cookie сеанса помечен как httpOnly
, что означает, что им нельзя манипулировать с помощью javascript на стороне клиента.
Одна дополнительная мера предосторожности, которую вы можете принять (если вы решите позволить клиенту работать с файлом cookie сеанса), — это sign
файл cookie, поэтому, даже если клиент изменит содержимое файла cookie, подпись файла cookie не будет действительной и будет отклонена сервер.