2016-10-08 2 views
0

Ich habe einen PHP WebSocket Server erstellt und mit einem Webbrowser verbunden. Alles funktioniert gut. Jetzt möchte ich einige Cookie-Informationen an den Websocket-Server senden, aber die Cookies und nie mit den Kopfzeilen senden. Ich habe wirklich keine Ahnung, warum die Cookies nicht in den Anforderungsheadern enthalten sind. (Das Cookie wird gesetzt und nicht leer, wenn sie mit PHP in index.php echo'ing)PHP Cookies werden nicht durch Websocket Handshake gesetzt

Dies ist die Anfrage und Antwort-Header

Anfrage

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 

Antwort

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

handshake

// 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"; 

Way of in-Client (Javascript) Verbindung zum Server

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

Antwort

4

Sie Ihre Seite von localhost Laden, aber Ihre WebSocket zu 127.0.0.1 verbinden.
Diese beiden werden als zwei verschiedene Domänen betrachtet, daher teilen sie keine Cookies.

Sie benötigen eine WebSocket verbinden:

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

Oder besser, wenn Sie den Hostnamen nicht tun hard:

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

Danke Ihnen sehr für die Antwort und für die Antwort! Es funktioniert jetzt. Ziemlich seltsam, ich dachte immer, dass localhost gleich 127.0.0.1 ist, also ist es egal, welchen ich benutzt habe, aber es stellt sich heraus, dass es nicht das selbe ist. – Piet

Verwandte Themen