如何验证 websocket 连接

How can I authenticate websocket connection

为 websocket 连接验证用户 session 的常用方法是什么?

据我了解,websocket 消息仅包含数据,没有 headers。因此授权 cookie 对服务器后端不可用。应用程序应该如何区分来自不同客户端的消息?

您使用的是哪个 websocket 服务器?

如果您的网络服务器和 websocketserver 相同,您可以通过 websocket 发送 sessionid,force-disconnect 任何未在第一条消息中发送有效 sessionid 的客户端。

如果您的 websocketserver 正确解析了 HTTP 升级请求中发送的 HTTP headers,它也可能会保存任何 cookie。这是我的 firefox(版本 35)的请求:

GET /whiteboard HTTP/1.1
Host: *:*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Sec-WebSocket-Version: 13
Origin: *
Sec-WebSocket-Protocol: whiteboard
Sec-WebSocket-Key: iGPS0jjbNiGAYrIyC/YCzw==
Cookie: PHPSESSID=9fli75enklqmv1a30hbdmg1461
Connection: keep-alive, Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

如您所见,phpsessionid 传输正常。如果它解析 HTTP headers,请检查你的 websocketserver 的文档。请记住,如果 websocket 的域与网络服务器的域不同,则不会发送 cookie。