2012-02-26 4 views
10

을 지속 유지해야 할 때 세션 ID가 다시 생성됩니다 연결합니다. "새로운 세션"나는 선을 볼 수 이론적으로 NodeJS의 레디 스 내가 NodeJS에서 레디 스와 표준 세션 지속성을 사용하려고이

var express = require('express'); 
var RedisStore = require('connect-redis')(express); 
var app = module.exports = express.createServer(); 

// Configuration 

app.configure(function(){ 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    secret: "keyboard cat", 
    store: new RedisStore, 
    key: 'sid' 
    })); 
}); 


app.get('/', function (req, res) { 
    if (req.session.isValid) { 
    console.log("There is an existing session."); 
    } 
    else { 
    req.session.isValid = true; 
    console.log("New session."); 
    console.log('Old session ID: ' + req.header('Cookie')); 
    console.log('New session ID: ' + req.session.id); 
    } 

    res.render('index', {'title': s}); 
}); 
app.listen(4000); 

일단 웹 사이트를 방문하면 "기존 세션이 있습니다"라는 메시지가 나타납니다. 불행히도 모든 통화에서 새 세션 ID가 재생성됩니다. 내가 얻을 동시에

[app.js] New session. 
[app.js] Old session ID: undefined 
[app.js] New session ID: nuoHKZj2j0AoRkvqT4xE5h6W.zF+DNv2rzr3kpeO2IyD7sa4xdamFQMugjfQvY6OYymE 
[app.js] New session. 
[app.js] Old session ID: sid=neLUc5PXxPoj1yFqukerv49x.BHzYKiuAfFSNHKd4fCAkv8wNwZO%2FxykJPN5R5tjAlQc 
[app.js] New session ID: FvuzjnXvchCkmVqsq5mrodL2.5YlT3InfTbvOwEUc0dNpPLT77tcdJpNuhbFGVYkLneQ 
[app.js] New session. 
[app.js] Old session ID: sid=pFbyVdlNZXtF5vZ35CW9sfmq.nJ1RBjJu59iUJJjmZv9TCYiYLcvycme%2BJh8sQC6%2FzEE 
[app.js] New session ID: KdPhwqwwgmOnPZEuVapy7EJe.I0TGT9HSSQQSporwCNsxl11rXDxR/ysjTeZb0lD5uwI 

:이 같은 콘솔 로그는 모습입니다 브라우저에있는 쿠키의 내용이 제대로 전달되고, 잘 작동하고 나는

req.header('Cookie') 

에서 볼 수 있습니다 내가 RedisStore의 MemoryStore의 insteand를 사용하는 경우

sess:nuoHKZj2j0AoRkvqT4xE5h6W.zF+DNv2rzr3kpeO2IyD7sa4xdamFQMugjfQvY6OYymE 
*2 
$3 
get 
$73 
sess:Q6Z06GL4hdRytKA2MToCIgVw.JWxImSB/m20Urn+IYMQqnNqfQp4ygAESiyBLORn3Iuo 
*2 
$3 
get 
$73 
sess:neLUc5PXxPoj1yFqukerv49x.BHzYKiuAfFSNHKd4fCAkv8wNwZO/xykJPN5R5tjAlQc 
*2 
$3 
get 
$73 
sess:FvuzjnXvchCkmVqsq5mrodL2.5YlT3InfTbvOwEUc0dNpPLT77tcdJpNuhbFGVYkLneQ 
*2 
$3 
get 
$73 
sess:zvCWdwzowgAfl6jH8m0D31vL.b5tK5VZUJtPHrdvH09A/hjhjoOg6bT0CmAcWWRf99SI 
*2 
$3 
get 
$73 
sess:pFbyVdlNZXtF5vZ35CW9sfmq.nJ1RBjJu59iUJJjmZv9TCYiYLcvycme+Jh8sQC6/zEE 
*2 
$3 
get 
$73 
sess:KdPhwqwwgmOnPZEuVapy7EJe.I0TGT9HSSQQSporwCNsxl11rXDxR/ysjTeZb0lD5uwI 
*2 
$3 
get 
$73 
sess:r793eaJyOnaq2RNyw1Hmpuwv.xnonbOlaWEAlpz+LDg0SHcUeAa0sbjyw0oIcwFmlX0w 

이 모든 것이 예상 작품처럼 : 레디 스-CLI에서 "MONITOR"명령을 실행할 때 출력을 다음과 같습니다.

아이디어가 있으십니까?

+0

안녕하세요 Raph - 해결 했습니까? 나는 같은 문제를 겪고있다./ – UpTheCreek

+0

새로운 Redis 버전으로 업그레이드하는 것이 트릭을 만든 것 같다. 그러나 나는 아직도 문제가 어디에서 왔는지 모른다. – Raph

답변

0

비슷한 문제가 있습니다. 모든 요청시마다 내 세션이 재생성되었습니다. 나는 개발이 이루어지는 가상 머신에 적절한 날짜를 설정함으로써이를 해결했다.

+0

App VM과 Redis VM간에 다른 날짜가 있었습니까? 불일치는 얼마나 컸습니까? – UpTheCreek

-1

모든 요청에서 세션을 재생성했을 때 동일한 문제가 발생했습니다. 그 이유는 '정적'미들웨어가 '세션'아래 배치 되었기 때문입니다. 그래서, 즉, 적절한 순서로 미들웨어를 배치해야합니다 :

... 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.session({ store: new RedisStore({ prefix: 'sid_' }) })); 
app.use(app.router) 
app.get ... 

'express.session'미들웨어 '정적'에 있어야한다.

관련 문제