如果登录用户导航到要使用WebSockets的站点的某个区域,我如何获取该会话ID以便我可以在服务器上识别他?
我的服务器基本上是一个无休止的while循环,它保存有关所有连接用户和东西的信息,所以为了获取该id,我认为唯一合适的时刻是握手,但不幸的是握手的请求头不包含cookie数据:
请求标题
接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
Accept-Encoding:gzip,deflate 接受语言:en-US,en; q = 0.5
缓存控制:无缓存
连接:保持活力,升级
DNT:1
主持人:192.168.1.2:9300
来源:http://localhost
Pragma:no-cache
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
的服务器文件的下载链接答案 0 :(得分:13)
http只有cookie和安全cookie才能与websocket一起使用。
某些websocket模块选择忽略请求中的cookie,因此您需要阅读模块的规范。
尝试:websocket节点:https://github.com/Worlize/WebSocket-Node。
确保使用安全websocket协议作为wss://xyz.com
此外,Chrome将不在“检查元素”网络标签中显示Cookie。
在节点中尝试转储请求,例如:
wsServer.on('request', function(request) {
console.log(request);
console.log(request.cookies); // works in websocket node
}
如果你在日志中的某个地方看到了cookie ...你已经知道了。
如果您使用的是仅限安全的Cookie,则需要使用安全的网络套接字:wss://
Cookie在初始请求中传递。 Chrome不会一直显示它(因为它有时会显示省略Cookie信息的临时标题。
websocket服务器可以使用cookie做“某事”并将它们附加到每个请求中。
查看服务器的代码:https://github.com/Flynsarmy/PHPWebSocket-Chat/blob/master/class.PHPWebSocket.php我没有在任何地方看到“cookie”这个词,因此它没有很好地打包并附加到每个websocket连接。我可能是错的,这就是为什么你可能想联系开发人员,看看整个标题是否附加到每个连接以及如何访问它。
我可以肯定地说:如果你使用安全的cookie,那么除非你使用安全的websocket wss://mysite.com
,否则cookie将不传输。普通ws://mysite.com
无效。
此外,如果域名与网页相同,则只会在请求中传输Cookie。