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

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

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

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

Accept: text / html, application / xhtml + xml, application / xml; q = 0,9, / ; q = 0,8
Accept-Encoding: gzip, deflate Accept-Language: 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-Версия: 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

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

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

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

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

Обновить:

Кроме того, хром не покажет файлы cookie на вкладке «Проверка элемента».

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

  wsServer.on('request', function(request) { console.log(request); console.log(request.cookies); // works in websocket node } 

Если вы видите файлы cookie где-то в журнале … у вас это есть.

Если вы используете безопасные файлы cookie, вам необходимо находиться в защищенных веб-сокетах: wss://

Update2:

Печеньки передаются в первоначальном запросе. Chrome не показывает его (все время), поскольку иногда он показывает предварительные заголовки, которые опускают информацию cookie.

Сервер websocket должен делать «что-то» с помощью файлов cookie и прикреплять их к каждому запросу.

Глядя на код вашего сервера: https://github.com/Flynsarmy/PHPWebSocket-Chat/blob/master/class.PHPWebSocket.php Я не вижу слова «cookie» в любом месте, поэтому он не красиво упакован и прикрепленных к каждому подключению к сети. Я могу ошибаться, поэтому вы можете обратиться к разработчику и посмотреть, прикреплен ли весь заголовок к каждому соединению и как получить к нему доступ.

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

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