2013-12-04 4 views
6

Мы являемся узлом + Express + Passport для аутентификации и сохраняем информацию о сеансе для Redis. У меня есть maxAge, установленный в cookie сеанса, чтобы отключиться через один час. Кажется, что все работает нормально, но проблема в том, что cookie сеанса истечет через один час, независимо от активности пользователя.Как сохранить сеанс паспорта NodeJS

Есть ли способ, который я могу вручную обновить/сохранить в сеансе cookie?

ответ

0

Да, вы можете вручную сбросить MaxAge для каждого печенья после входа пользователя в систему:

req.session.cookie.maxAge = 60 * 60 * 1000; 

Вот connect session documentation.

4

Да, вы можете! Если файл cookie не изменился по запросу, он не будет повторно отправлен в браузер, вы можете проверить инструменты разработчика под файлами cookie, чтобы убедиться в этом. Так что некоторые, в том числе и я, как сделать, это изменить cookie по запросу, где есть активность пользователя, которая должна продлить сеанс. Что-то вроде следующего:

req.session.lastAccess = new Date().getTime();

Другая вещь, которую я видел, но у меня были проблемы с является использование Session#touch:

req.session.touch()

+0

Я просто провел несколько тестов и снова req.session.touch() не похоже на работу. Дата истечения срока действия, указанная в файле cookie, распространяется независимо от того, что, но сам файл cookie не отправляется в браузер. Если вы делаете что-то вроде 'req.session.lastAccess', cookie всегда отправляется. – ragamufin

+0

+1 Я наблюдал ту же проблему и для меня (Express @ 3.4.4) 'Session.prototype.touch()' тоже не работает. Чтобы сохранить место в Redis, я использую только хит-счетчик, например. 'хитов: 4'. – hgoebl

5

Вы, вероятно, хотите использовать опция «перекатывания» для вашей сессии. Это «заставляет cookie установить на каждый ответ» и «сбрасывает срок годности». Вы хотите установить переключение на true.

Также обратите внимание на вариант «resave». Это означает, что сеанс будет сохранен даже при немодифицированном ... »Вероятно, вы захотите также установить эту опцию в true. Обратите внимание, что хотя значение по умолчанию для этой опции равно true, вы должны явно установить значение. Опираясь на значение по умолчанию для этого параметра, вместо того, чтобы его явно указывать, теперь устарело.

Try что-то вроде:

app.use(session({ secret: 'keyboard cat', 
        cookie: { maxAge: 60000 }, 
        rolling: true, 
        resave: true, 
        saveUninitialized: false 
        } 
     ) 
); 

Вот документация. Посмотрите в разделе «Опции» и «options.resave»: https://github.com/expressjs/session.

0

Попробуйте этот код:

app.use(session({ secret: 'Category', cookie: { maxAge: 6000000 }, resave: true, saveUninitialized: false}));

Смежные вопросы