2016-11-16 72 views
2

我在一個項目中使用快速會話,我很努力地瞭解它何時在瀏覽器上創建一個用於會話存儲的cookie。什麼時候使用快速會話創建一個cookie?

在我的項目中,當我請求我的主頁(「/」)時,沒有創建cookie,但是當我請求任何其他頁面時,創建了一個cookie。如果我遠離主頁(即「/ user/signup」),請從瀏覽器中刪除cookie,然後返回主頁,但不會爲會話存儲創建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',那麼將保存是否有任何修改,這將解決您的問題。

相關問題