问题 在websocket握手上使用会话数据


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

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

请求标题 

接受:text / html,application / xhtml + xml,application / xml; q = 0.9,/; Q = 0.8
  Accept-Encoding:gzip,deflate   Accept-Language:en-US,en; q = 0.5
  缓存控制:无缓存
  连接:保持活力,升级
  DNT:1
  主持人:192.168.1.2:9300
  起源: http://localhost
  Pragma:没有缓存
  Sec-WebSocket-Key:5C7zarsxeh1kdcAIdjQezg ==
  Sec-WebSocket-Version:13
  升级:websocket
  User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64;   rv:27.0)Gecko / 20100101 Firefox / 27.0

那我怎么能真正抓住那个身份?我以为我可以以某种方式强制javascript发送cookie数据以及该请求,但2014年任何自尊的网站都将有httpOnly会话cookie,以便不会解决。任何帮助是极大的赞赏!

这是我正在使用的服务器文件的下载链接 http://www.4shared.com/rar/7RIos1tuce/PHPWebSocket-Chat-master.html


11775
2018-03-09 17:13


起源

你为什么不把文件放在github而不是4shared? - Pacerier


答案:


http只有cookie和安全的cookie才能与websocket一起使用。

一些websocket模块选择忽略请求中的cookie,因此您需要阅读模块的规范。

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

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

更新:

此外,铬会  在“检查元素”网络选项卡中显示cookie。

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

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

如果你在日志中的某个地方看到了cookie ...你已经知道了。

如果您使用的是仅限安全的Cookie,则需要使用安全的网络套接字: wss:// 

UPDATE2:

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。


11
2018-03-09 19:02



对不起,我真的很想坚持我现在的服务器。我认为问题不在服务器中,因为cookie丢失了 请求 标头,从用户发送:/ - php_nub_qq
您不会在chrome中的请求标头中看到Cookie。你用的是什么服务器? - Brian McGinity
我知道你会的 不 请参阅标题中的Cookie。取决于您使用的websocket服务器 - 您 将 在服务器上看到它们。 - Brian McGinity
找到了: github.com/Flynsarmy/PHPWebSocket-Chat 看起来这个特定服务器不支持cookie。您可能想要联系创建者,看看他是否有更新版本或使用不同的websocket服务器。 - Brian McGinity
就是这样!!!我在用 192.168.1.2 作为websocket地址服务器,但正在连接 localhost 在浏览器中。谢谢你,先生 !!!!! - php_nub_qq