2016-11-16 3 views
2

프로젝트에서 express-sessions를 사용하고 있으며 세션 저장과 함께 사용하기 위해 브라우저에 쿠키를 생성하는 시점을 이해하기가 어려워요.express-sessions를 사용할 때 쿠키는 언제 만들어 집니까?

내 프로젝트에서 내 홈페이지 ("/")를 요청하면 쿠키가 생성되지 않지만 다른 페이지를 요청하면 쿠키가 만들어집니다. 홈페이지 (예 : '/ user/signup')를 벗어난 상태에서 브라우저에서 쿠키를 삭제 한 다음 다시 홈페이지로 이동하면 세션 저장을위한 쿠키가 생성되지 않습니다.

내 문제는 홈 페이지 이외의 다른 모든 요청에 ​​대해 세션 쿠키를 만드는 이유를 이해하는 것입니다.

var app = express(); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(validator()); 
app.use(cookieParser()); 
app.use(session({ 
    secret: 'mysupersecret', 
    resave: false, 
    saveUninitialized: false, 
    store: new mongoStore({ 
     mongooseConnection: mongoose.connection 
    }), 
    cookie: {maxAge: 180 * 60 *1000} 
})); 
app.use(flash()); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use('/user', userRoutes) 
app.use('/', indexRoutes); 

router.get('/', function(req, res, next) { 

    Product.find(function(err, docs){ 
     if(err){ 
      console.log(err); 
     } else { 
      var prodRows = []; 
      var rowLength = 3; 
      for(var i = 0; i < docs.length; i += rowLength){ 
       prodRows.push(docs.slice(i, i + rowLength)) 
      }; 
      res.render('shop/index', { title: 'Shopping Cart', prods: prodRows}); 
     } 
    }); 
}); 

router.get('/user/signin', function(req, res, next){ 
    console.log('Session2: ', req.session); 
    console.log('Cookies2: ', req.cookies); 
    var messages = req.flash('error'); 
    console.log('Session3: ', req.session); 
    console.log('Cookies3: ', req.cookies); 
    res.render('user/signin', { csrfToken: req.csrfToken(), messages: messages, hasErrors: messages.length > 0}); 
}); 

어떤 도움을 주시면 감사하겠습니다.

+0

이 경우 코드에 https://www.npmjs.com/package/connect-mongo 패키지를 사용하십시오. 세션을 MongoDB에 저장했습니다. – Mikhail

+0

왜 Hompage 용 세션 쿠키가 생성되지 않습니까? – 2K01B5

+0

브라우저 제한 쿠키의 최대 크기는 도메인 당 4KB입니다. – Mikhail

답변

2

'saveUninitialized'가 'false'로 설정되어 있기 때문에 홈 페이지에 쿠키가 수신되지 않습니다. 홈 페이지로 이동하면 세션이 만들어 지지만 결코 수정되지 않으므로 저장되지 않습니다. 'saveUninitialized'를 'true'로 설정하면 수정 된 내용이든 아니든 저장되며 문제가 해결됩니다.

관련 문제