在websocket握手时使用会话数据



如果登录用户导航到网站的某个区域,这是使用WebSockets,我如何获取会话Id,以便我可以在服务器上识别他?

我的服务器基本上是一个无尽的while循环,它持有有关所有连接的用户和东西的信息,所以为了抓住那个id,我认为唯一合适的时刻是在握手,但不幸的是握手的请求头不包含cookie数据:

请求头

接受:text/html, application/xhtml + xml应用程序/xml; q = 0.9 /; q = 0.8
Accept-Encoding: gzip, deflate接收语言:en - us, en; q = 0.5
cache - control: no - cache
连接:keep-alive, Upgrade
DNT: 1
主持人:192.168.1.2:9300
原产地:http://localhost
编译指示:no - cache
Sec-WebSocket-Key: 5 c7zarsxeh1kdcaidjqezg = =
Sec-WebSocket-Version: 13
升级:websocket
用户代理:Mozilla/5.0 (Windows NT 6.1;WOW64;rv:27.0) Gecko/20100101 Firefox/27.0

如何获取id呢?我想我可以以某种方式强迫javascript发送cookie数据随着该请求,但任何自尊的网站在2014年将有httpOnly会话cookie,所以不会工作。任何帮助都非常感谢!

这里是我正在使用的服务器的链接:https://github.com/Flynsarmy/PHPWebSocket-Chat/blob/master/class.PHPWebSocket.php(感谢接受的答案)

仅http cookie以及安全cookie在websocket中工作良好。

一些websocket模块选择忽略请求中的cookie,所以你需要阅读该模块的规格。

尝试:websocket节点:https://github.com/Worlize/WebSocket-Node.

确保使用安全的websocket协议作为wss://xyz.com

更新:

另外,chrome将显示cookie在"inspect element"网络选项卡。

在节点尝试转储请求,如:

 wsServer.on('request', function(request) {
   console.log(request);
   console.log(request.cookies); // works in websocket node
 }

如果你在日志中看到cookie…你说对了。

如果你使用的是安全cookie,你需要在安全的web套接字:wss://

更新2:

在初始请求中传递cookie。Chrome不显示它(所有的时间),因为有时它显示临时标题,省略cookie信息。

这是由websocket服务器对cookie做一些"事情"并将它们附加到每个请求。

看看你的服务器代码:https://github.com/Flynsarmy/PHPWebSocket-Chat/blob/master/class.PHPWebSocket.php我没有看到"cookie"这个词在任何地方,所以它不是很好地包装和附加到每个websocket连接。我可能是错的,这就是为什么你可能要联系开发人员,看看是否整个头被附加到每个连接以及如何访问它。

这我可以肯定地说:如果你使用安全cookie,那么cookie将传输,除非你使用安全websocket wss://mysite.com。普通ws://mysite.com不能工作。

而且,cookie只有在域名与网页相同的情况下才会在请求中传输。

相关内容

  • 没有找到相关文章

最新更新