2016-08-02 7 views
1

나는 redis을 세션 저장소로 사용하는 노드/익스프레스 응용 프로그램을 가지고 있습니다.연결 redis가있는 노드/Express

의 만료일 인 처리에 관한 질문이 있습니다.

브라우저가 닫힐 때까지 활성 세션이 필요하므로 세션 만료 시간을 설정하지 않았습니다.

세션 쿠키가 정상적으로 작동하지만 Redis에 대한 의문점이 있습니다.

Redis DB에 저장된 몇 개의 키/값이 절대로 만료되지 않는 것으로 보입니다.

어떻게 처리해야할까요?

특정 유휴 시간과 함께 저장된 값을 삭제하도록 redis를 구성하는 방법이 있습니까?

또는 응용 프로그램 내부에서 연결 다시 연결이 호출 될 때 TTL을 설정하는 것이 좋습니다. 응용 프로그램 내부 세션의


실제 구성 :

var session = require('express-session'); 
var RedisStore = require('connect-redis')(session); 

app.use(session({ 
    store: new RedisStore({port:6379, host: 'localhost'}), 
    secret: "my-secret-here", 
    resave: false, 
    saveUninitialized: true })); 

답변

1

명시 세션과 레디 스를 사용하여, 당신은 TTL을 다시 명시 세션에서 터치() 메서드를 사용할 수 있습니다. 세션을 만들 때이 TTL을 설정한다면, 당신은 세션이 만료되지 않는 노선 같은 것을 할 : 레디 스의 TTL을 재설정하고 가정 만료에서 세션을 방지 할 수

api.get("/someRoute/", (req, res) => { 
    req.session.touch(); 

    // Whatever else you need to do 
    res.sendStatus(200); 
} 

클라이언트는 여전히 API를 때리고 있습니다. 클라이언트가 API와 충분히 오랫동안 상호 작용하지 않으면 브라우저가 닫히거나 앱 사용이 끝났음을 의미합니다.

+0

touch() 메소드는 cookie.maxAge? 하지만 세션 쿠키에는 maxAge가 설정되지 않았습니다. 브라우저가 닫히면 쿠키가 만료됩니다. 아마도 Redis DB에 저장된 데이터에 대해 TTL을 설정하고 store.touch()와 같은 것을 사용하여 TTL을 새로 고칠 수 있습니까? 올바른 내용 일 수 있습니까? – Zauker

+0

Redis TTL 값을 설정하려고했으나 제안 된 req.session.touch() 명령이 정상적으로 작동합니다. Redis DB에 저장된 키의 Idletime을 새로 고칩니다. 고마워요. – Zauker

1

세션 저장소를 만드는 동안 ttl을 지정할 수 있습니다. readme에서 더 많은 옵션을 찾을 수 있습니다.

app.use(session({ 
    store: new RedisStore(options), 
    secret: 'keyboard cat', 
    ttl : 20 // ttl is in seconds. From the readme. 
})); 
+0

예 나는 이런 것입니다. 나는 진정으로 올바른시기를 알지 못했지만 나는 다른 가치를 가지고 시도 할 것입니다. 어떻게 TTL을 재설정 할 수 있습니까? Levi 또는 store.touch()와 같이 req.session.touch()를 사용해야합니다? 나는 그것을 이해하지 못했다. – Zauker

+0

'touch'를 사용하거나 ttl을 설정하고 잊어 버릴 수 있습니다. –