2014-10-06 3 views
0

Скажите, что сеансы узла экспресс-сессии сохраняются в приложении (что означает, что они не обязательно доступны из входящих req), как проверить, истек ли какой-либо из этих сеансов? Каков правильный тест?Проверка срока действия экспресс-сеанса

+0

Проще говоря, вы просто проверили, будет ли время между созданной меткой времени и теперь больше, чем ttl (или продолжительность сеанса). –

+0

Да, конечно, но какое поле в сеансе я проверяю и как? Должен ли я проверять недействительность? – JVerstry

+0

Я предполагаю, что это будет зависеть от того, как хранятся сеансы. Например, я храню сессии в базе данных и регулярно удаляю истекшие сеансы. Я думаю, все зависит от того, что вы пытаетесь сделать. Зачем вам нужна эта информация. –

ответ

-1

Событие, исключенное на сеанс, истекло (к сожалению ...). Однако, если ваши сеансы сохраняются в хранилище сеансов, вы можете реализовать setTimeout() при создании сеанса и запустить его при истечении срока действия сеанса /.

Пример:

//Lets say your session's ttl is 600 seconds 
//On session creation : 

setTimeout(function(){ 
    //send event 
},600000); 

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

Вы можете посмотреть at this SO question для получения дополнительной информации (хотя он использует устаревшее соединение, концепция одинаков).

+0

Это не сработает, потому что сеансы могут касаться() - ed. – JVerstry

+0

По моему опыту, 'setTimeout' в узле невероятно ненадежен. Я бы предпочел проверить, что атрибут 'expires' не был превышен в каждом запросе. –

+0

@ RobM. хорошая идея, хотя в этом случае setTimeout должен быть достаточным, это не так, как OP требует тика. Кроме того, каких запросов нет? Я не уверен, что OP нужно делать точно ... Я бы использовал таймаут, чтобы получить TTL в магазине. Если сеанс был touch() ed, я просто обновил свой таймер и перепроверку позже. – xShirase

0

предположим, что вы сохранили имя пользователя в сеансе. req.session.name='pankti', когда вы пытаетесь его получить, и если он не определен, он истек. req.session.name == 'undefined'