#php #cookies #websocket #handshake
#php #файлы cookie #websocket #рукопожатие
Вопрос:
Я создал сервер PHP websocket и подключился к нему с помощью веб-браузера. Все работает нормально. Теперь я хочу отправить некоторую информацию о файлах cookie на сервер websocket, но файлы cookie и никогда не отправляются с заголовками. Я действительно понятия не имею, почему файлы cookie не включены в заголовки запроса. (Файл cookie устанавливается и не является пустым при повторном использовании php в index.php )
Это заголовок запроса и ответа
запрос
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 Protocolsrn";
$response.= "Upgrade: websocketrn";
$response.= "Connection: Upgradern";
$response.= "Sec-WebSocket-Accept: " . $secAccept . "rn";
Способ подключения к серверу в клиенте (javascript)
var socket = new WebSocket('ws://127.0.0.1:9000/chat');
Ответ №1:
Вы загружаете свою страницу с localhost
, но подключаете свой WebSocket 127.0.0.1
.
Эти два домена считаются двумя разными доменами, поэтому они не используют общие файлы cookie.
Вам необходимо подключить свой WebSocket как:
var socket = new WebSocket('ws://localhost:9000/chat');
Или лучше, если вы не вводите жестко имя хоста:
var socket = new WebSocket('ws://' location.hostname ':9000/chat');
Комментарии:
1. Большое вам спасибо за ответ и за ответ! Теперь он работает. Довольно странно, я всегда думал, что localhost равен 127.0.0.1, поэтому не имеет значения, какой из них я использовал, но оказывается, это не одно и то же.