快速会话中的 req.session 不持久
Posted
技术标签:
【中文标题】快速会话中的 req.session 不持久【英文标题】:req.session in express-session not persisting 【发布时间】:2016-05-06 02:56:04 【问题描述】:我有以下代码:
var express = require('express');
var cookieParser = require('cookie-parser');
var http = require('http')
var app = express();
app.use(cookieParser());
var session = require('express-session');
app.use(session(
resave: false,
saveUninitialized: true,
secret: 'sdlfjljrowuroweu',
cookie: secure: true
));
app.get('/test', test);
function test(req, res)
var sess = req.session;
console.log('before', sess);
if (sess.views)
sess.views++
req.session.save();
res.setHeader('Content-Type', 'text/html')
res.write('<p>views: ' + sess.views + '</p>')
res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>')
res.end();
else
sess.views = 1;
req.session.save();
res.end('welcome to the session demo. refresh!')
console.log('after', sess);
return;
var server = http.createServer(app);
server.listen(8181);
然后重新加载页面,我只是不断收到视图计数为 0 的消息。
检查控制台,每次都是这样的输出:
before cookie:
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
secure: true
after cookie:
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true,
secure: true ,
views: 1
所以它似乎根本没有节省
【问题讨论】:
您使用的是安全连接吗?又名https://
,我怀疑你不是,但你在express.session(...)
中将secure
标志设置为true,这意味着你将永远无法访问cookie(因此会话将无法正常工作)。
【参考方案1】:
将cookie: secure: true
更改为cookie: secure: false
使用 secure 标志意味着 cookie 将仅设置在 Https 上。
【讨论】:
感谢您将我的评论复制到答案中。 我没有看到你的评论 是的,这就是原因。谢谢你们! 谢谢!!几天来同样的问题 这确实是问题所在,但是可以实现cookie: secure: app.get('env') === 'production'
,这样只有在应用上线时才需要 SSL。以上是关于快速会话中的 req.session 不持久的主要内容,如果未能解决你的问题,请参考以下文章
从另一个端点检索时,使用 express-session 保存到 req.session 的数据为空
没有 req.session.save() 会话不会保存在 Node.js 中