使用快速会话时何时创建 cookie?
When is a cookie created when using express-sessions?
我在项目中使用 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});
});
如有任何帮助,我们将不胜感激。
您的主页上没有收到 cookie,因为 'saveUninitialized' 设置为 'false'。当您导航到您的主页时,会创建一个会话,但它永远不会被修改,因此永远不会被保存。如果您将 'saveUninitialized' 设置为 'true' 那么无论是否修改任何内容都会被保存,这将解决您的问题。
我在项目中使用 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});
});
如有任何帮助,我们将不胜感激。
您的主页上没有收到 cookie,因为 'saveUninitialized' 设置为 'false'。当您导航到您的主页时,会创建一个会话,但它永远不会被修改,因此永远不会被保存。如果您将 'saveUninitialized' 设置为 'true' 那么无论是否修改任何内容都会被保存,这将解决您的问题。