警告:connect.session() MemoryStore 不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程
Posted
技术标签:
【中文标题】警告:connect.session() MemoryStore 不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程【英文标题】:Warning: connect.session() MemoryStore is not designed for a production environment, as it will leak memory, and will not scale past a single process 【发布时间】:2017-12-06 13:02:16 【问题描述】:大家好,这是我的代码:
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
));
此代码总是在我的日志中返回:
。
我尝试用谷歌搜索它,但我似乎不理解一些教程。 对不起我的英语不好。
【问题讨论】:
【参考方案1】:使用cookie-session
而不是express-session
为我解决了这个问题。
您将会话存储在客户端上,而不是使用 cookie 存储在服务器上。
简单地说:
-
用
npm install cookie-session
安装它
更改
var session = require('express-session');
致
var session = require('cookie-session');
【讨论】:
【参考方案2】:这都是关于存储会话的,您应该添加一个将会话存储到数据库中的存储系统。这有助于您的应用管理会话。
例如在mongodb中你可以使用connect-mongo,你应该找到一个store包和其他数据库。
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)
));
【讨论】:
如果我不使用 Mongo 会怎样? 你有一些选择github.com/expressjs/session/blob/master/…【参考方案3】:我希望这对和我遇到同样问题的人有所帮助。 自己挖的就行了。
//-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
);
【讨论】:
如果你稍微解释一下会更有帮助!......因为你使用RedisStore(),Mongodb呢?? 问题在于将会话数据存储在内存中并不安全。它没有以任何方式加密或保护。此外,每次重新启动服务器时,所有会话数据都将消失,用户将不得不再次登录。此外,您将来无法扩展您的应用程序,因为会话数据存储在本地内存中,并且无法被远程运行或在同一主机上作为单独进程运行的应用程序的其他实例访问使用外部会话存储有助于解决这些问题。 Redis 是一个可以做到这一点的数据库。 MongoDB 也可以工作。以上是关于警告:connect.session() MemoryStore 不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程的主要内容,如果未能解决你的问题,请参考以下文章
node exprss-session 和connect-mongo
解释connect session中的length和clear session store方法
Node.js Connect session() 参数中的安全选项是啥
debugging requires the debug connect session system privilege.