【问题标题】:When is a cookie created when using express-sessions?使用快速会话时何时创建 cookie?
【发布时间】:2017-03-30 12:53:33
【问题描述】:

我在一个项目中使用 express-sessions,但我很难理解它何时会在浏览器上创建一个 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});
});

任何帮助将不胜感激。

【问题讨论】:

  • 在这种情况下,在您的代码中使用了npmjs.com/package/connect-mongo 包。它将会话保存到 MongoDB
  • 为什么没有为主页创建会话cookie?
  • 浏览器限制 cookie 每个域的最大大小为 4 KB

标签: node.js session express cookies express-session


【解决方案1】:

由于“saveUninitialized”设置为“false”,您的主页没有收到 cookie。当您导航到主页时,会创建一个会话,但它不会被修改,因此永远不会保存。如果您将“saveUninitialized”设置为“true”,那么无论是否修改任何内容都会保存,这将解决您的问题。

【讨论】:

  • 我整天都在寻找答案,这就是 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2022-08-06
  • 2017-01-07
  • 2014-04-16
  • 2016-11-30
  • 2012-08-30
  • 1970-01-01
相关资源
最近更新 更多