大家好,这是我的代码:
var express = require('express');
var session = require('express-session');
var app = express();
app.set('trust proxy', 1);
app.use(session({
secret: 'secret',
saveUninitialized: true,
resave: false,
maxAge: 1000 * 60 * 15,
cookie:{
secure: true
}
}));
此代码总是在我的日志中返回:
警告:connect.session() MemoryStore 不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程。
我尝试用谷歌搜索它,但我似乎不明白一些教程。 抱歉我的英语不好。
使用
cookie-session
而不是 express-session
为我解决了这个问题。
您将会话存储在客户端上,而不是使用 cookie 存储在服务器上。
简单地说:
npm install cookie-session
var session = require('express-session');
到
var session = require('cookie-session');
我希望这对与我遇到同样问题的人有所帮助。 自己挖的。
//-momery unleaked---------
app.set('trust proxy', 1);
app.use(session({
cookie:{
secure: true,
maxAge:60000
},
store: new RedisStore(),
secret: 'secret',
saveUninitialized: true,
resave: false
}));
app.use(function(req,res,next){
if(!req.session){
return next(new Error('Oh no')) //handle error
}
next() //otherwise continue
});
这都是关于存储会话的,您应该添加一个将会话存储到数据库中的存储系统。这有助于您的应用程序管理会话。
例如,在 mongodb 中,您可以使用 connect-mongo,您应该找到一个存储包,对于其他数据库。
https://www.npmjs.com/package/connect-mongo
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
app.use(session({
secret: 'foo',
store: new MongoStore(options)
}));
express-session 的默认 MemoryStore 会导致内存泄漏,因为它没有合适的方法让它们过期。
使用下面的包来解决问题。
npm i memorystore
将 Express-Session 存储传递到 MemoryStore 以创建 MemoryStore 构造函数。
const session = require('express-session')
const MemoryStore = require('memorystore')(session)
app.use(session({
cookie: { maxAge: 86400000 },
store: new MemoryStore({
checkPeriod: 86400000 // prune expired entries every 24h
}),
resave: false,
secret: 'keyboard cat'
}))