如何从服务器向 socket.io 客户端发送 cookie?

Posted

技术标签:

【中文标题】如何从服务器向 socket.io 客户端发送 cookie?【英文标题】:How to send cookies to socket.io client from server? 【发布时间】:2019-04-23 11:01:25 【问题描述】:

在我的客户上,我这样做:

  useEffect(() => 
    socket.emit('login', myLoginCode)
  , [])

在服务器端我之前是这样做的:

app.get('login', (req, res) => 
      const cookieProtected = 
        maxAge: 946080000000,
        httpOnly: true,
        secure: true,
        sameSite: true
       
      res.cookie('id', login, cookieProtected)
      res.cookie('session', encryptSession, cookieProtected)
      res.cookie('logged', 'true', 
        maxAge: 946080000000,
        secure: true,
        sameSite: true
      )
)

但是我怎样才能对套接字做同样的事情呢?

  socket.on('login', loginCode => 
     // How to to place cookies in user browser from here?
    

也许有办法用 socket.emit 发送标头?

【问题讨论】:

你试过这个吗:***.com/questions/10771337/…? io.on('connection', async socket => try socket.handshake.headers.cookie = 'test=1; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/' 是的,它不起作用。 【参考方案1】:

如果不重写 IO 库,我们就无法做到这一点,所以唯一的选择是在客户端设置 cookie。

现在我只是在服务器上验证用户并像对象一样发送客户端cookie,然后在客户端我这样做:

document.cookie =
    'id=' +
    loginData.id +
    '; expires=Fri, 31 Dec 9999 23:59:59 GMT; secure; samesite=strict; path=/'

【讨论】:

以上是关于如何从服务器向 socket.io 客户端发送 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

通过套接字从 c# 向节点 socket.io 服务器发送数据

向 Socket.io 中的其他房间发送消息

socket.io 如何跨多个服务器发送消息?

python Socket.IO 客户端,用于向 TornadIO2 服务器发送广播消息

PHP 向 Node / Socket.IO 服务器发送消息

Socket.io 服务器无法向客户端发送数据