快速会话不起作用 - 每次请求都需要新会话
express sessions do not work - new session upon every request
我使用 express-session 按以下方式设置会话管理:
var express = require('express');
var session = require('express-session');
var app = express();
var mongoose = require('mongoose');
var MongoStore = require('connect-mongo')(session);
mongoose.connect('mongodb://localhost/sessionTest');
app.listen(3000, function () {
});
app.use(session({
secret: 'justsomestuff',
resave: false,
saveUninitialized: false,
cookie: { } ,
store: new MongoStore({mongooseConnection: mongoose.connection})
}));
app.get('/first', function (req, res) {
console.log('first');
req.session.test = 'Tester';
req.session.save();
console.log(req.sessionID);
res.send(req.sessionID);
});
app.get('/second', function (req, res) {
console.log('second');
if (req.session)
console.log('session exists');
console.log(req.sessionID);
console.log(req.session.test);
res.send(req.sessionID);
});
但是每次我调用 /first 或 /second 时都会使用新的会话 ID 建立一个新会话
curl 127.0.0.1:3000/first
curl 127.0.0.1:3000/second
我用
"connect-mongo": "^1.2.1",
"express": "~4.13.4",
"express-session": "^1.14.0",
所有会话也都在 mongo 数据库中。
这似乎是一个非常简单的问题,但我就是想不通。
您正在使用 curl。并且 curl 不隐式支持 cookie。您必须传递 cookie 值 explicitly via command。并在服务器尝试设置时读取 cookie 等。
为什么不使用浏览器测试呢?
或者如果你仍然想要 curl,那么使用 -b 和 -c 参数,就像这样。
curl -b cookies.txt -c cookies.txt
-b 告诉 curl 将传入的 cookie 存储在 cookies.txt 中,-c 告诉 curl 将来自 cookies.txt 的所有 cookie 嵌入到此请求中。
此外,通过添加过期字段来延长 cookie 的寿命。
app.use(session({
secret: 'justsomestuff',
resave: false,
saveUninitialized: false,
expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
cookie: { } ,
store: new MongoStore({mongooseConnection: mongoose.connection})
}));
我使用 express-session 按以下方式设置会话管理:
var express = require('express');
var session = require('express-session');
var app = express();
var mongoose = require('mongoose');
var MongoStore = require('connect-mongo')(session);
mongoose.connect('mongodb://localhost/sessionTest');
app.listen(3000, function () {
});
app.use(session({
secret: 'justsomestuff',
resave: false,
saveUninitialized: false,
cookie: { } ,
store: new MongoStore({mongooseConnection: mongoose.connection})
}));
app.get('/first', function (req, res) {
console.log('first');
req.session.test = 'Tester';
req.session.save();
console.log(req.sessionID);
res.send(req.sessionID);
});
app.get('/second', function (req, res) {
console.log('second');
if (req.session)
console.log('session exists');
console.log(req.sessionID);
console.log(req.session.test);
res.send(req.sessionID);
});
但是每次我调用 /first 或 /second 时都会使用新的会话 ID 建立一个新会话
curl 127.0.0.1:3000/first
curl 127.0.0.1:3000/second
我用
"connect-mongo": "^1.2.1",
"express": "~4.13.4",
"express-session": "^1.14.0",
所有会话也都在 mongo 数据库中。
这似乎是一个非常简单的问题,但我就是想不通。
您正在使用 curl。并且 curl 不隐式支持 cookie。您必须传递 cookie 值 explicitly via command。并在服务器尝试设置时读取 cookie 等。
为什么不使用浏览器测试呢?
或者如果你仍然想要 curl,那么使用 -b 和 -c 参数,就像这样。
curl -b cookies.txt -c cookies.txt
-b 告诉 curl 将传入的 cookie 存储在 cookies.txt 中,-c 告诉 curl 将来自 cookies.txt 的所有 cookie 嵌入到此请求中。
此外,通过添加过期字段来延长 cookie 的寿命。
app.use(session({
secret: 'justsomestuff',
resave: false,
saveUninitialized: false,
expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
cookie: { } ,
store: new MongoStore({mongooseConnection: mongoose.connection})
}));