Подтвердить что ты не робот

Установить доступный cookie для клиентской стороны в экспресс

Я работаю над приложением Node, которое использует Express и SocketIO. Я хочу установить cookie в свой контроллер Express, который затем доступен из моего кода Javascript на стороне клиента. Все, что я пытаюсь, похоже, не работает:

res.setHeader('Set-Cookie','test=value');
res.cookie('rememberme', 'yes', { maxAge: 900000 });

Есть ли что-то, что мне здесь не хватает? Спасибо заранее!

4b9b3361

Ответ 1

Подумал! По умолчанию Express устанавливает для параметра httpOnly значение true. Это означает, что ваши файлы cookie недоступны для Javascript на стороне клиента. Чтобы правильно установить файлы cookie, доступные на клиенте, просто используйте фрагмент, как показано ниже:

res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false});

Я также заметил, что если вы вызываете эту команду, а затем вызываете res.redirect, cookie не будет установлен. За этой командой необходимо выполнить res.render в какой-то момент, чтобы она работала. Не уверен, почему это так.

Ответ 2

На самом деле я испытал ту же проблему в течение нескольких часов.

Вот мой код:

res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true });

Я вижу инструкцию Set-Cookie в заголовке ответа, но в Chrome я не могу найти файл cookie, и я не могу найти файл cookie по req.cookies ['mycookie'].

Основной причиной этой проблемы является то, что я не использовал соединение HTTPS. (Express 4.x с промежуточным программным обеспечением cookie-parser)

В соответствии с этим документом: Простые шаги для обеспечения безопасности вашего приложения Node

Если я установил параметр secure = true, браузер не отправит мой файл cookie в любом HTTP-запросе, кроме безопасного HTTPS-соединения. Затем, после того как я удалил secure: true, я получил свою работу с cookie.

Ответ 3

поэтому для доступа в http мы можем использовать:

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?