Использовать данные сеанса по рукопожатию websocket

Если зарегистрированный пользователь переходит к определенной области сайта, которая должна использовать WebSockets, как мне захватить этот идентификатор сеанса, чтобы я мог идентифицировать его на сервере?

Мой сервер - это, в основном, бесконечный цикл while, который содержит информацию обо всех подключенных пользователях и т.д., поэтому, чтобы захватить этот идентификатор, я решил, что единственный подходящий момент находится в рукопожатии, но, к сожалению, заголовки запросов квитирования не содержат данных cookie:

Заголовки запросов

Принять: text/html, application/xhtml + xml, application/xml; q = 0.9,/; q = 0.8
Accept-Encoding: gzip, deflate Accept-язык: en-US, en; q = 0.5
Cache-Control: no-cache
Соединение: сохранить, обновить
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

Ответ 1

http только cookie, а также безопасные файлы cookie отлично работают с websocket.

Некоторые модули websocket решили игнорировать файлы cookie в запросе, поэтому вам нужно прочитать спецификации модуля.

Попробуйте: websocket node: https://github.com/Worlize/WebSocket-Node.

Обязательно используйте защищенный протокол websocket как wss://xyz.com

Обновление:

Кроме того, хром будет не показывать файлы cookie на вкладке "Инспектировать элемент".

В node попробуйте сбросить запрос, например:

 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" в любом месте, поэтому он не красиво упакован и прикреплен к каждому подключение к Интернету. Я мог ошибаться, поэтому вы можете обратиться к разработчику и посмотреть, прикреплен ли весь заголовок к каждому соединению и как получить к нему доступ.

Это я могу сказать наверняка: если вы используете безопасные куки файлы, cookie будет не передаваться, если вы не используете защищенный websocket wss://mysite.com. Обычная ws://mysite.com не будет работать.

Кроме того, файлы cookie будут передаваться только в запросе, если домен совпадает с веб-страницей.