【问题标题】:Sharing session between socket.io and express not working on remote serversocket.io 和 express 之间的共享会话在远程服务器上不起作用
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 经过 3 天的调试中间件和任何多行代码后,它只是 url ಥ‿ಥ
猜你喜欢
  • 2015-03-26
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 2022-01-24
  • 2020-06-11
  • 2014-04-16
相关资源
最近更新 更多