2014-12-22 4 views
1

현재 ArangoDB (connect-arango) 용 세션 저장소를 개발 중입니다. 그것은 MongoDB 세션 저장소 (connect-mongo, 그러므로 'connect-arango')와 거의 동일하게 작동하지만, 문제는 ArangoDB에 엔트리를위한 TTL이 내장되어 있지 않다는 것입니다.NodeJS 사용자 정의 세션 저장소, 만료 된 세션 지우기

MongoDB에는이 문제가 없습니다. 하지만 ArangoDB에서는 세션 저장소에서이 작업을 수행해야합니다.

(getTimeout을 사용하여) 60 초마다 만료 된 세션을 검사하는 것으로 충분합니까, 아니면 "get"기능이 호출 될 때마다 확인하는 것과 같이 다른 것을 사용해야합니까?

내가 그들을 취소하는 AQL 쿼리를 사용하는 것과 유사한 :

FOR s IN sessions 
    FILTER s.expires < DATE_NOW() 
    REMOVE s IN sessions 

사용자가 자신의 쿠키를 삭제한다면, 세션의 "수"기능을 사용하여 액세스되지 않을 것이라고 나는 의미 거기에서 만료되었는지 확인할 수 없습니다.

그러나 내가 할 수있는 "get"함수를 호출 할 때마다 위의 쿼리를 실행할 수 있지만 꽤 불필요한 및 서버에 더 많은 부하를 넣을 것이라고 생각합니다.

편집 : 아무도 오해하지 않습니다. 만료 된 세션을 지우는 방법을 알고 있습니다. 분명히 (이 경우 AQL 쿼리입니다.) 명확한 기능을 실행하는 빈도를 모르겠습니다.

답변

2

만료시 건너 뛰기 목록 색인을 넣으면 60 초마다 위의 쿼리를 실행해도 문제가 발생하지 않습니다. 매분이 쿼리를 실행하는 ArangoDB 내에서 정기적 인 작업을 생성 할 수도 있습니다.

Alan Plum이 기본적으로 위의 모든 것을 구현하는 ArangoDB에 세션 Foxx 앱을 추가했습니다. 그가 이미 문서를 발표했는지 확실하지 않습니다. 이 폭스의 응용 프로그램에 대한 문의 사항이있을 경우

localhost:8529/_db/_system/_admin/aardvark/standalone.html#!/sessions 

이 arangodb.org (에서) 해커에 앨런에게 연락하게 자유롭게 떨어졌다하십시오이 같이 API 문서는 ArangoDB 2.3로

+0

스킵 목록을 사용하는 방법은 어떻습니까? 그렇다면 누군가가 세션에 액세스 할 때마다 쿼리가 실행되지만 액세스간에 60 초 이상이 경과 한 경우에만 쿼리를 실행하십시오. 그렇게하면 한 시간 동안 아무도 사이트를 방문하지 않을 때마다 60 초마다 확인하지 못합니다. 어떤 시점에서 정리가 끝나면 콜렉션에서 만료 된 세션에 문제가 없습니다. – Metamist

+0

이 접근법도 작동해야하지만 GC를 트리거하는 요청은 지연 될 수 있습니다. – fceller

0

폭스가 내장되어 볼 수 있습니다 FoxPro 응용 프로그램에서 사용할 수있는 세션 내 응용 프로그램. Foxx를 사용하지 않으려는 경우에도 세션 응용 프로그램을 다시 사용할 수 있습니다.

간단하게 세션 응용 프로그램 사본을 원하는 탑재 지점에 마운트 할 수 있습니다. 이렇게하면 세션 세부 정보 (예 : 세션 ID 길이)뿐만 아니라 세션 TTL을 구성 할 수 있습니다. 이 앱은 새로운 세션을 만들고, 세션을 업데이트하고, 기존 세션을 검색하고 삭제할 수있는 HTTP API를 제공합니다. 은 세션을 검색하거나 업데이트하려고 할 때 자동으로 TTL (즉, 만료 된 세션 삭제)을 시행합니다.

현재 TTL은 세션에 액세스 할 때마다 적용됩니다. 사용 사례에 따라 만료 된 세션이있는 콜렉션이 여전히 혼란 스러울 수 있습니다. 현재 ArangoDB에서 반복되는 작업을 직접 예약 할 수는 없습니다. 작업 큐가 있지만 이런 종류의 문제에는 적합하지 않습니다. 이것은 ArangoDB의 차기 버전에서 해결 될 가능성이 있습니다.

세션 앱의 마운트 사본 모음에 누적 된 세션 만료 기간을 모니터링하는 것이 좋습니다. 만료 된 세션을 일주일에 한 번 비우는 데 충분한 일 것입니다. (또는 그 이하). 세션 앱은 API를 통해 액세스 할 때 만료 된 세션을 자동으로 삭제하므로 유일한 문제는 버려진 세션입니다 (예 :개인 브라우징 모드 또는 일회성 사용자).

공개 : ArangoDB 2.3에 도입 된 새로운 세션/인증 애플리케이션을 작성했습니다.

+0

Foxx 앱에 대해 많이 알지 못하지만, 이해하는 바에 따르면, NodeJS와는 다른 것입니다. 그렇다면 NodeJS로 작성된 다른 프로젝트 중 하나에 대해이 세션 저장소를 개발할 때부터 Foxx를 사용하지 않을 것입니다. – Metamist

+0

@ Metamist Foxx 앱은 본질적으로 ArangoDB에 직접 설치되어 사용자 정의 HTTP 엔드 포인트를 제공하는 작은 웹 앱입니다. 앞에서 말했듯이, 당신은 자신의 Foxx 응용 프로그램을 작성하지 않고 내장 된 세션 응용 프로그램을 사용할 수 있습니다. ArangoDB가 사전 설치되어 있으므로 db의 웹 인터페이스 또는 쉘을 통해 마운트 할 수 있으며 Foxx 코드 한 줄을 직접 작성하지 않아도됩니다. ArangoDB를 멍청한 REST 스토리지로 사용하고 싶지 않으면 사용하지 않는 것이 좋습니다. –

+0

나를 위해 웹 응용 프로그램이 내장되어 있지 않습니다. 응용 프로그램 탭의 사용 가능한 섹션이 비어 있습니다. github에서 다운로드해야합니까? 방금 2-3 일 전에 웹 사이트에서 다운로드 했으므로 최신 버전의 ArangoDB를 사용하고 있습니다. – Metamist