Когда я использую Express cookie-session, достаточно ли удалить cookie на стороне клиента, чтобы выйти из системы?

Я использую Экспресс-сессия 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 легко создавать масштабируемые сетевые приложения и веб-серверы.


26
1

Ответ:

Решено

Да, это правильно, вы можете просто удалить файл cookie, и в следующий раз, когда клиент попадет на сервер, не будет сеанса для идентификации пользователя, поэтому пользователь выйдет из системы.

Однако, как правило, клиентская сторона не должна иметь возможности работать с файлом cookie сеанса из соображений безопасности, и почти всегда файл cookie сеанса помечен как httpOnly, что означает, что им нельзя манипулировать с помощью javascript на стороне клиента.

Одна дополнительная мера предосторожности, которую вы можете принять (если вы решите позволить клиенту работать с файлом cookie сеанса), — это sign файл cookie, поэтому, даже если клиент изменит содержимое файла cookie, подпись файла cookie не будет действительной и будет отклонена сервер.