【发布时间】: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