2014-10-13 3 views
0

다른 express-session 버전을 사용하여 다음 예제를 시도 할 때 문제가 발생했습니다. 특급 세션 1.0.2 사용express-session을 사용하는 동안 세션 데이터가 메모리에 저장되지 않습니다.

이 작동

var connect = require('express'), 
    cookieParser = require('cookie-parser'), 
    session = require('express-session'); 

var app = connect(); 
app.use(cookieParser()) 
.use(session({secret:'sessionsecret',cookie:{maxAge:60000}})) 
.use(function(req,res,next){ 
    if(req.session.views){ 
     res.setHeader('Content-Type','text/html'); 
     res.write('<p>views ' + req.session.views + '</p>'); 
     //Here 
     res.end(); 
     req.session.views++; 
    } 
    else { 
     req.session.views = 1; 
     res.end('welcome to the demoe. Try refresh this page'); 
    } 

}) 
.listen(3000); 

을; 페이지를 새로 고침하면보기 카운터가 계속 증가합니다. 그러나, 나는 1.8.2 (최신), 그 코드가 작동을 중단하고 뷰 카운터가 1로 유지하지만 다음에 코드를 수정 한 후, 다시 작동에 명시 세션을 변경할 때 :

var connect = require('express'), 
cookieParser = require('cookie-parser'), 
session = require('express-session'); 

var app = connect(); 
app.use(cookieParser()) 
.use(session({secret:'sessionsecret',cookie:{maxAge:60000}})) 
.use(function(req,res,next){ 
    if(req.session.views){ 
     res.setHeader('Content-Type','text/html'); 
     res.write('<p>views ' + req.session.views + '</p>'); 
     //Here 
     req.session.views++; 
     res.end(); 
    } 
    else { 
     req.session.views = 1; 
     res.end('welcome to the demoe. Try refresh this page'); 
    } 

}) 
.listen(3000); 

이 응답이 새로운 표현 세션에서 전송되기 전에 세션 데이터가 저장되고있는 것 같습니다. 누군가 이것을 설명 할 수 있습니까?

답변

1

예, 이 호출되거나 콘텐츠 데이터가 전송 된 후에 ExpressJS sessionsreq.session 개체를 저장할 수 없습니다.

이유는 쿠키를 보낼 수있을 때만 쿠키를 설정할 수 있기 때문에 (세션을 저장할 수 있기 때문입니다). 헤더가 전송 된 후 (컨텐츠가 전송 된 후에) 쿠키를 재설정 할 수 없으며 세션을 저장할 수 없습니다.

코드 here에서 코드를 볼 수 있습니다.

관련 문제