Javascript 警告:connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程
大家好这里是我的代码:Javascript 警告:connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程,javascript,node.js,session,cookies,memory-leaks,Javascript,Node.js,Session,Cookies,Memory Leaks,大家好这里是我的代码: 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:{
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
}
}));
此代码始终在我的日志a中返回:
警告:connect.session()MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程
我试着在谷歌上搜索,但我似乎不懂一些教程。
对不起,我的英语不好。我希望这能帮助那些和我一样在苦苦挣扎的人。 我自己挖的
//-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,您应该找到一个存储包和其他数据库
使用
cookie会话
而不是express会话
为我解决了这个问题
您将会话存储在客户端,而不是带有cookie的服务器上
简单地说:
var session=require('express-session')代码>
tovar session=require('cookie-session')代码>
我相信我能帮助你,我也犯了同样的错误,不得不自己调试。 你有几个选择 1st:您使用express session创建了一个用户会话,但忘记在heroku config vars中将会话机密添加到vars中 例: 使用process.env.SESSION\u SECRET而不将该秘密添加到heroku vars将导致此错误(我就是这样做的) 2nd:(与上面的答案相同)您没有指定会话的存储位置。您应该添加一个存储系统,将会话存储到数据库中。这有助于您的应用程序管理会话 例如,在mongodb中,您可以使用connect mongo,您应该找到一个存储包和其他数据库 例: 通过这样做,您将会话存储在mongo中 3:如果所有操作都失败,我不建议您将cookis存储在客户端而不是服务器端。要执行此操作,您必须将express会话(如果正在使用)替换为cookie会话 例: 然后编写应用程序。正常使用
希望这对您有所帮助,很抱歉回复太晚,如果您做一点解释,将更有帮助!!。。。既然您使用redistore(),那么Mongodb呢?问题是将会话数据存储在内存中并不安全。它没有以任何方式进行加密或保护。此外,每次服务器重新启动时,所有会话数据都将消失,用户将不得不再次登录。此外,您无法在将来扩展应用程序,因为会话数据存储在本地内存中,并且应用程序的其他实例无法远程或在同一主机上运行,因为使用外部会话存储的单独进程有助于解决这些问题。Redis是一个可以做到这一点的数据库。MongoDB也可以。如果我不使用Mongo呢?你有一些选择,为什么不推荐第三个呢?(这似乎是最简单的)
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
app.use(session({
secret: 'foo',
store: new MongoStore(options)
}));
app.use(
session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
app.use(session({
secret: 'foo',
store: new MongoStore(options)
}));
npm i cookie-session
var session = require('cookie-session');