2016-11-16 5 views
2

私はプロジェクトでexpress-sessionsを使用していますが、セッション記憶域で使用するためにブラウザにCookieを作成するときを理解するのには苦労しています。express-sessionsを使用しているときにCookieが作成されるのはいつですか?

自分のホームページ(「/」)をリクエストすると、クッキーは作成されませんが、他のページをリクエストするとクッキーが作成されます。ホームページ(「/ user/signup」)から離れている場合は、ブラウザからCookieを削除してからホームページに戻ると、セッションストレージ用のCookieは作成されません。

私の問題は、ホームページ以外のすべてのリクエストに対してセッションクッキーが作成される理由を理解することです。

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

なぜ、セッションCookieが作成されていないのですか? – 2K01B5

+0

ブラウザの制限Cookieの最大サイズはドメインあたり4キロバイトです – Mikhail

答えて

2

'saveUninitialized'が 'false'に設定されているため、ホームページにCookieが表示されません。ホームページに移動すると、セッションが作成されますが、変更されることはありません。保存されません。 'saveUninitialized'を 'true'に設定すると、何かが変更されたかどうかにかかわらず保存され、問題が解決されます。

関連する問題