【发布时间】:2018-10-02 23:08:09
【问题描述】:
首先,这就是我分享课程的方式。它基本上遵循this线程中的实现。
var sessionMiddleware = session({
name: 'websiteName.sess',
store: new RedisStore({
client: redisClient,
ttl: 60*60*24*7,
db: 2
}),
secret: 'secredCode',
saveUninitialized: false,
resave: true
});
io.use(function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
// Express Session
app.use(sessionMiddleware);
此解决方案在 localhost 上运行良好。但是,当我在远程 AWS 服务器上运行 express 应用程序时,不会共享会话数据。请注意,我使用 elasticache redis 作为 redis 客户端。
将用户 ID 保存到快速会话后,会话对象如下所示。
req.session:
{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"flash":{},"userId":"8ad5dce4b600xxxxxxxxx"}
socket.request.session:
{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}
我很确定问题不在于没有保存会话数据,作为用户ID,在用户下次访问服务器时保存在会话中。
为什么会这样?是他们的解决方案吗?
编辑: 这是我与 socket.io 的客户端连接:
var socket = io.connect('http://ip.ad.dr.ess:80');
【问题讨论】:
-
请出示客户端socket.io连接码。
-
那么,浏览器网址栏中的地址是否也正好是
http://ip.ad.dr.ess:80?如果没有,那么 socket.io 和网页将不会共享 cookie,因此您会错过会话 cookie。 -
谢谢,它成功了@jfriend00。
标签: node.js express session socket.io