Если зарегистрированный пользователь переходит к определенной области сайта, которая должна использовать 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://
Печеньки передаются в первоначальном запросе. 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 будут передаваться только в запросе, если домен совпадает с веб-страницей.