gpt4 book ai didi

node.js - socket.io 和express 之间的共享 session 在远程服务器上不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:21 25 4
gpt4 key购买 nike

首先,这就是我分享 session 的方式。它基本上遵循 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);

此解决方案在本地主机上运行良好。但是,当我在远程 AWS 服务器上运行 Express 应用程序时, session 数据不会共享。请注意,我使用 elasticache redis 作为 redis 客户端。

将用户 ID 保存到快速 session 后, session 对象如下所示。

请求 session :

{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"},"flash":{},"userId":"8ad5dce4b600xxxxxxxxx"}

socket.request.session:

{"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path":"/"}}

我非常确定问题不在于 session 数据没有被保存,因为用户 ID 会在用户下次访问服务器时保存在 session 中。

为什么会发生这种情况?他们有解决办法吗?

编辑:这是我与 socket.io 的客户端连接:

  var socket = io.connect('http://ip.ad.dr.ess:80');

最佳答案

将我的评论作为答案,因为它似乎已经解决了您的问题:

您需要确保浏览器地址栏中的地址与 http://ip.ad.dr.ess:80 完全相同的主机/端口?如果没有,那么 socket.io 和网页将不会共享 cookie,因此您将错过 session cookie。

关于node.js - socket.io 和express 之间的共享 session 在远程服务器上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49972016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com