这里的好日子是我的代码:
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不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程。
我尝试使用谷歌搜索但我似乎不理解一些教程。 抱歉我的英语不好。
答案 0 :(得分:5)
我希望这会对那些和我一样挣扎同样问题的人有所帮助。 只是自己挖。
//-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
});
答案 1 :(得分:4)
使用cookie-session
代替express-session
为我解决了这个问题。
您将会话存储在客户端上,而不是使用cookie存储在服务器上。
简单地:
npm install cookie-session
var session = require('express-session');
到
var session = require('cookie-session');
答案 2 :(得分:0)
关于存储会话,您应该添加一个存储系统,将会话存储到您的数据库中。这有助于您的应用管理会话。
例如,在mongodb中你可以使用connect-mongo,你应该找到一个商店包和其他数据库。
https://www.npmjs.com/package/connect-mongo
twoWeeksFromNow := time.Now().AddDate(0, 0, 14)
oneMonthFromNow := time.Now().AddDate(0, 1, 0)
oneYearFromNow := time.Now().AddDate(1, 0, 0)
答案 3 :(得分:0)
我相信我可以帮助你,我遇到了同样的错误,不得不自己调试。 你有几个选择。
第一个:您使用 express-session 创建了一个用户会话,但忘记将会话密钥添加到 heroku config vars 中的 vars 例如:
app.use(
session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
使用 process.env.SESSION_SECRET 而没有将秘密添加到 heroku vars 会给你这个错误(这就是我的情况)
第二:(与上面的答案相同)您没有指定存储会话的位置。您应该添加一个存储系统,将会话存储到您的数据库中。这有助于您的应用管理会话。
比如在mongodb中你可以使用connect-mongo,你应该找到一个store包和其他数据库。
例如:
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
app.use(session({
secret: 'foo',
store: new MongoStore(options)
}));
通过这样做,您将会话存储在 mongo 中。
第三:如果一切都失败了,我不推荐最后一个选项,是在客户端而不是服务器端存储 cookie。 为此,您必须替换 express-session(如果您重新使用它)与 cookie 会话。
例如:
npm i cookie-session
var session = require('cookie-session');
然后照常编写 app.use
希望能帮到你,抱歉回复晚了