2014-10-06 110 views
0

说节点快速会话保存在应用程序(意味着它们不一定从传入req访问),如何检查这些会话是否过期?什么是正确的测试?检查快速会话是否过期

+0

简而言之,您只需检查创建的时间戳和现在之间的时间是否大于ttl(或会话持续时间)。 – 2014-10-06 18:24:23

+0

当然是的,但是我会在什么领域检查以及如何?我必须检查无效吗? – JVerstry 2014-10-06 18:25:50

+0

我想这将取决于会话的存储方式。例如,我将会话存储在数据库中,并定期删除过期的会话。我想这一切都取决于你想要做什么。你为什么需要这些信息。 – 2014-10-06 18:27:01

回答

-1

会议期间没有发生任何事件过期(不幸...)。 但是,如果您的会话保存在会话存储中,则可以在创建会话时实施setTimeout(),并在会话过期/即将过期时触发事件。

例子:

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

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

根据什么信息都存储在您的会话商店,你可以使用任何你想要的用户ID,或会话ID,或其他任何东西。

你可以看看at this SO question了解更多信息(虽然它使用了不推荐使用的连接,但概念是相同的)。

+0

这不起作用,因为会话可以触摸()。 – JVerstry 2014-10-06 18:29:08

+0

根据我的经验,节点中的setTimeout是非常不可靠的。我会选择检查每个请求中没有超过“expires”属性。 – 2014-10-06 18:30:23

+0

@RobM。好主意,虽然在这种情况下setTimeout应该足够了,但它不像OP需要刻度精度。另外,什么是没有要求?我不确定OP需要做什么......我会使用超时来获取商店中的TTL。如果会话已触摸()编辑,我只需更新我的计时器并稍后重新检查。 – xShirase 2014-10-06 18:32:06

0

假设您在会话中保存了用户名。 req.session.name='pankti'当您尝试获取它时,如果它未定义,那么它已过期。 req.session.name == 'undefined'