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); 

는 세션 저장소에 저장되는 정보에 따라, 당신은 당신이 원하는 사용자 ID, 또는 세션 ID 또는 다른 것을 사용할 수 있습니다.

자세한 정보는 at this SO question으로 표시 할 수 있습니다 (지원되지 않는 연결을 사용하지만 개념은 같습니다).

+0

세션을 터치 할 수 있기 때문에 작동하지 않습니다. – JVerstry

+0

제 경험상, 노드의'setTimeout'은 믿을 수 없을만큼 신뢰할 수 없습니다. 나는 각 요청에서'expires' 속성이 초과되지 않았는지 검사 할 것입니다. –

+0

@RobM. 좋은 생각이긴하지만,이 경우에는 setTimeout으로 충분해야합니다. OP에서 틱 정밀도가 필요하지는 않습니다. 또한 요청이 없습니다. OP가 정확히 무엇을해야하는지 잘 모르겠다 ... 나는 타임 아웃을 사용하여 상점에서 TTL을 가져온다. 세션이 터치() 된 경우 타이머를 업데이트하고 나중에 다시 확인하면됩니다. – xShirase

0

세션에 사용자 이름을 저장했다고 가정 해 보겠습니다. req.session.name='pankti'을 얻으려고 시도 할 때 정의되지 않은 경우 만료됩니다. req.session.name == 'undefined'

관련 문제