NodeJS — платформа для сеансов без сохранения состояния?

Существует ли структура для поддержки сеансов, полностью управляемых клиентом? Другими словами, вместо того, чтобы хранить только подписанный pid в файле cookie (как это делает Express), сохраните весь контекст... чтобы вы могли управлять состоянием в кластерах без необходимости сохранения.


person Robert Christian    schedule 31.07.2013    source источник
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