如何从服务器向 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 服务器发送数据
python Socket.IO 客户端,用于向 TornadIO2 服务器发送广播消息