Существует ли структура для поддержки сеансов, полностью управляемых клиентом? Другими словами, вместо того, чтобы хранить только подписанный pid в файле cookie (как это делает Express), сохраните весь контекст... чтобы вы могли управлять состоянием в кластерах без необходимости сохранения.
NodeJS — платформа для сеансов без сохранения состояния?
comment
Сеанс содержит личную информацию о пользователе, предназначенную только для сервера. Отправка всего сеанса обратно пользователю нехороша. Он может быть изменен клиентом. Полностью управляемый клиентом сеанс — плохая идея.
- person user568109   schedule 01.08.2013
comment
@ user568109, это распространенный шаблон, и его можно сделать безопасно. cse.msu.edu/~alexliu/publications/Cookie/cookie. pdf
- person Robert Christian   schedule 05.08.2013
comment
Безопасный протокол cookie предназначен для защиты соединения между браузером и сервером от третьих лиц. Общим шаблоном, о котором вы упоминаете, является файл cookie только для HTTP, который управляется исключительно браузером, поэтому пользователь не может его изменить.
- person user568109   schedule 05.08.2013
comment
В конце дня, после аутентификации, вы сохраняете сеанс, сохраняя токен в браузере, который обеспечивает доступ обратно в систему. В случае, за который вы выступаете, есть также указатель (pid) на транзакцию, которая сохраняется на сервере. Единственная разница в том, что я делаю, заключается в том, что в дополнение к pid есть немного данных (тех же данных, к которым можно получить доступ с помощью вашего pid), хранящихся на клиенте безопасным образом.
- person Robert Christian   schedule 05.08.2013
Ответы (1)
Существует экспресс-промежуточное ПО, которое поддерживает это:
https://github.com/expressjs/cookie-session
сессия cookie()
Предоставляет сеансы на основе файлов cookie и заполняет req.session. Это промежуточное ПО принимает следующие параметры:
- name — имя файла cookie по умолчанию «session»
- keys - список секретных ключей для предотвращения несанкционированного доступа
- секрет — используется как одиночный ключ, если ключи не указаны
- options — дополнительные параметры, такие как secure, httpOnly, maxAge и т. д.
Промежуточное ПО:
var cookieSession = require('cookie-session')
...
app.use(cookieSession({
name: "my_session_cookie",
secret: "dont_tell_anybody_the_secret_and_change_it_often",
options: { ... }
));
app.use((req, res, next) => {
// set options on req.session before your response goes out
req.session.viewCount = (req.session.viewCount || 0) + 1;
res.end(`You viewed the page ${req.session.viewCount} times.`);
});
Чтобы очистить cookie, просто присвойте сеансу значение null перед ответом:
req.session = null
person
Robert Christian
schedule
04.08.2013