最近使用 nodejs express-session 模块来获取 nodejs 服务的 session 信息,使用方式如下:
var router = express.Router();
var cookieParser = require('cookie-parser');
router.use(cookieParser());
router.use(session({
secret: '123456',
resave: false,
saveUninitialized: true
}));
resave 参数表示:每次请求都重新设置session cookie。(我理解为当此参数为 true 时,每次请求 都会生成一份新的 session 信息) saveUninitialized 参数表示:无论有没有session cookie,每次请求都设置个session cookie ,默认给个标示为 connect.sid。(我理解为用来初始化 session cookie,并默认 session id 在 cookie 中 存储的名字为 connect.sid)
遇到的问题: 使用这种方式在我本机(mac os)上使用正常,sessionId 也能够正常获取。但用同样的方式,在一台 linux 测试机(CentOS)上使用时,会出现每次访问 nodejs 的路由时,都会生成一个新的 sessionId
版本信息如下: 我本机(mac os)nodejs v4.2.4、npm 3.5.3、express 4.13.1 测试机(CentOS)nodejs v4.3.1、npm 2.14.12、express 4.13.4
你用的内存存储的session,多进程的时候不能共享,首先确定你服务器是不是跑了多个进程
@FoghostCn 确实如此,服务器上我在使用 pm2 管理 nodejs 进程。刚刚试了用单进程启动,sessionId 每次请求一致。这岂不是让我放弃使用 pm2 了…
你可以尝试用数据库存储,像connect-mongo或者connect-redis,最不济你存成文件,但是加机器的时候就又是问题了
@FoghostCn 没错,本来不想把 session 折腾到 redis 里了。感谢解答~