>  기사  >  웹 프론트엔드  >  세션 만료 시간을 새로 고치는 Node.js 메소드 time_node.js

세션 만료 시간을 새로 고치는 Node.js 메소드 time_node.js

WBOY
WBOY원래의
2016-05-16 15:16:161757검색

Node.js에서는 일반적으로 세션을 사용 및 관리하고 서버와 클라이언트 브라우저 간의 세션 상태를 저장하기 위해 express-session 패키지를 사용합니다. 그렇다면 사용자가 현재 페이지를 새로 고치거나 페이지의 버튼을 클릭할 때 세션 만료 시간을 어떻게 달성할 수 있을까요? ASP.NET의 세션 상태와 유사하게 페이지가 특정 기간 동안 활성 상태로 유지되는 한 세션은 만료되지 않습니다. 이 기능은 다음 코드를 통해 구현할 수 있습니다. Node.js 코드에 다음 미들웨어를 추가합니다.

// use this middleware to reset cookie expiration time
// when user hit page every time
app.use(function(req, res, next){
req.session._garbage = Date();
req.session.touch();
next();
}); 

이러한 방식으로 요청이 들어올 때마다 미들웨어는 원하는 효과를 얻기 위해 세션 만료 시간을 다시 수정합니다.

그런 다음 코드에 세션 사용을 추가합니다.

app.use(session({
secret: 'test', 
resave: false, 
saveUninitialized: true,
cookie:{
maxAge: 1000*60*60 // default session expiration is set to 1 hour
},
store: new MemcachedStore({
hosts: ['127.0.0.1:9000'],
prefix: 'test_'
})
})); 

위 세션에서는 세션 저장 방식으로 memcached를 사용하고 있습니다. memcached 사용 방법은 Github https://github.com/balor/connect-memcached
에서 참고하실 수 있습니다.

물론 memoryStore, redis, mongoDB 등 다른 세션 저장 방법을 사용할 수도 있으며 사용 방법은 유사합니다.

Node.js 세션 저장의 여러 가지 방법에 대해 이야기하겠습니다

Node.js 세션 저장소에는 다음과 같이 성능 테스트를 위한 네 가지 선택적 방법이 있습니다.

Concurrency: 1
none 4484.86 [#/sec] 
memory 2144.15 [#/sec] 
redis 1891.96 [#/sec] 
mongo 710.85 [#/sec] 
Concurrency: 10
none 5737.21 [#/sec] 
memory 3336.45 [#/sec] 
redis 3164.84 [#/sec] 
mongo 1783.65 [#/sec] 
Concurrency: 100
none 5500.41 [#/sec] 
memory 3274.33 [#/sec] 
redis 3269.49 [#/sec] 
mongo 2416.72 [#/sec] 
Concurrency: 500
none 5008.14 [#/sec] 
memory 3137.93 [#/sec] 
redis 3122.37 [#/sec] 
mongo 2258.21 [#/sec]

비교를 보면 Redis 스토리지는 동시성이 많을수록 성능이 더 뛰어난 것으로 나타났습니다.

세션에서 사용하는 페이지는 매우 간단한 페이지입니다.

app.get("/", function(req,res){
if ( req.session && req.session.user_id){
req.session.no = req.session.user_id;
} else {
throw Error('error');
}
res.send("No: " + req.session.no);});

Redis 스토어 구성:

app.use(express.session({
store: new RedisStore({
host: 'localhost',
port: 6379,
db: 2,
}),
secret: 'hello'}));

몽고 스토어 구성:

app.use(express.cookieParser());app.use(express.session({
store: new MongoStore({
url: 'mongodb://localhost/test-session'
}),
secret: 'hello'}));

mongodb 저장소를 사용할 때 모듈을 로드하는 것을 잊지 마세요: connect-mongo

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.