Он говорит о cookie-сессии, вы объясняете об общей сессии и об общей cookie

даю отдельную страницу приложения с использованием NodeJS и хочу использовать мой сеанс файлов cookie (cookie-сеанс npm), чтобы проверить, вошел ли пользователь в систему или нет. Со стороны моего узла я могу получить и установить cookie сессии, но я не знаю, как получить со стороны клиента.

Вот как я настраиваюсь со стороны моего сервера:

req.session.user_id = user[0]._id;

гдеuser[0]._id мой идентификатор пользователя, который я получаю от моего mongodb.

Ответы на вопрос(2)

Решение Вопроса

давайте предположим, что вы настроилиcookie-session что-то вроде этого:

var cookieSession = require('cookie-session');

app.use(cookieSession({
    keys: ['secret']
}));

Тогда давайте сохраним некоторые данные в сессии:

req.session.user_id = 123;

Если вы заглянете в инструменты разработчика вашего браузера, то увидите 2 набора файлов cookie:

express:sess = eyJ1c2VyX2lkIjoxMjN9
express:sess.sig = 01I_Rx2gACezZI1tdl2-NvxPq6w

Печеньеexpress:sess в кодировке base64. Если мы расшифруем его, мы получим{"user_id":123}, Важно понимать, что данные сеанса хранятся в самом файле cookie - это не просто идентификатор для сеанса.

Другое печенье,express:sess.sigподпись. Эта подпись генерируется с использованием ключа (secret в этом примере) и используется для предотвращения подделки. Любой может легко изменитьexpress:sess но если они не могут также генерировать соответствующиеexpress:sess.sig сервер будет знать, что он был изменен.

Все, что сказал, я предлагаю вам взглянуть наexpress-session промежуточное программное обеспечение. Он также использует куки, но использует их только для хранения идентификатора сессии. В куки не хранятся данные, то есть все они хранятся на сервере. Это гораздо больше похоже на работу сессий в большинстве других веб-фреймворков, но я не могу с уверенностью сказать, какой подход лучше всего соответствует вашим потребностям.

Какой бы подход вы ни использовали, cookie должен быть установлен наhttponly по умолчанию. Вы сможете проверить это в инструментах разработчика вашего браузера. Это означает, что он включен в HTTP-запросы, но не доступен через клиентский JavaScript. Это мера безопасности, разработанная для того, чтобы злоумышленнику было сложнее украсть куки. Вы можете отключить эту функцию безопасности вcookie-session с помощью:

app.use(cookieSession({
    httpOnly: false,
    keys: ['secret']
}));

После этого вы сможете получить доступ к этим файлам cookie, используяdocument.cookie.

Я повторяю, что это мера безопасности и отключать ее не рекомендуется. Я не могу судить, действительно ли это вызывает озабоченность в вашем заявлении.

Из вашего вопроса не ясно, хотите ли вы на самом деле разобрать значения из файла cookie или просто проверить его наличие. Если вам нужно разобрать его, вам нужно будет выполнить base64-декодирование соответствующего значения cookie, а затем JSON-декодирование.

Существуют различные альтернативные подходы, чтобы сохранить кукиhttponly, Не зная больше о том, что вы собираетесь делать с этой информацией, сложно быть конкретным. Если вы используете экспресс-представления (то есть рендеринг шаблона), тогда вы можете выполнять всю работу в шаблоне. Если вы находитесь на территории SPA, вы можете использовать запрос AJAX для сбора соответствующей информации. В крайнем случае вы можете даже использовать другой файл cookie, чтобы предоставить вам необходимую информацию, сохраняя при этом сеансовые файлы cookie в безопасности.

 George23 мар. 2018 г., 00:50
Итак, чтобы отредактировать куки со стороны клиента, вам нужно будет декодировать (atob) cookie, отредактируйте эти данные, затем перекодируйте их как base64 (btoa), но придется как-то генерировать правильный сигнал - что на самом деле не вариант?

вы не можете получить к ней доступ на стороне клиента, если вы имеете в виду cookie, ну, cookie не содержит ничего о сеансе, но ID указывает на него. Если вы хотите получить информацию из сеанса на стороне клиента, вы должны создать запрос, и сервер отправит информацию о сеансе обратно.

 num8er21 окт. 2017 г., 10:27
он говорит оcookie-session пакет, который дешифрует / шифрует данные сеанса и сохраняет эти данные на клиентском устройстве
 channae24 дек. 2018 г., 11:41
Он говорит о cookie-сессии, вы объясняете об общей сессии и об общей cookie

Ваш ответ на вопрос