2016-10-08 41 views
0

我创建了一个PHP websocket服务器并通过webbrowser连接到它。一切正常。现在我想将一些cookie信息发送到websocket服务器,但cookie并不会使用标头发送。我真的不知道为什么cookies不包含在请求标题中。 (设置cookie,而不是空的,在index.php中PHP echo'ing时)PHP Cookie不是由websocket handshake设置的

这是请求和响应首部

请求

GET ws://127.0.0.1:9000/chat HTTP/1.1 
Host: 127.0.0.1:9000 
Connection: Upgrade 
Pragma: no-cache 
Cache-Control: no-cache 
Upgrade: websocket 
Origin: http://localhost 
Sec-WebSocket-Version: 13 
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4 
Sec-WebSocket-Key: 2nR9SZYdLOG32fpV6eJ/wA== 
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits 

响应

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: QecMAdsem/PYww1pYkyjD+79OmM= 

握手

// do handyshake: (hybi-10) 
$secKey = $headers['Sec-WebSocket-Key']; 
$secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'))); 
$response = "HTTP/1.1 101 Switching Protocols\r\n"; 
$response.= "Upgrade: websocket\r\n"; 
$response.= "Connection: Upgrade\r\n"; 
$response.= "Sec-WebSocket-Accept: " . $secAccept . "\r\n"; 

连接到服务器的客户端(JavaScript)的途径

var socket = new WebSocket('ws://127.0.0.1:9000/chat'); 

回答

4

您从localhost加载你的页面,但你的网页套接字连接到127.0.0.1
这两个被认为是两个不同的域名,所以他们不共享cookie。

你需要你的WebSocket连接为:

var socket = new WebSocket('ws://localhost:9000/chat'); 

或者更好,如果你不硬编码的主机名:

var socket = new WebSocket('ws://'+location.hostname+':9000/chat'); 
+0

非常感谢你的回复和答案!它正在工作。很奇怪,我一直认为localhost等于127.0.0.1,所以我用哪一个并不重要,但事实证明它不一样。 – Piet