ログオンしているユーザーがWebSocketを使用するサイトの特定の領域に移動した場合、そのセッションIDを取得してサーバー上で特定できるようにするにはどうすればよいですか?
私のサーバーは基本的に無限のwhileループであり、接続されているすべてのユーザーとものに関する情報を保持しているため、そのidを取得するために、適切な瞬間はハンドシェイクであると考えましたが、残念ながらハンドシェイクのリクエストヘッダーにはcookieデータが含まれていません。
リクエストヘッダー
受け入れる: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
キャッシュ制御:キャッシュなし
接続:キープアライブ、アップグレード
DNT:1
ホスト:192.168.1.2:9300
起源:http://localhost
プラグマ:キャッシュなし
Sec-WebSocket-Key:5C7zarsxeh1kdcAIdjQezg ==
Sec-WebSocket-Version:13
アップグレード:websocket
ユーザーエージェント:Mozilla/5.0(Windows NT 6.1; WOW64; rv:27.0)Gecko/20100101 Firefox/27.0
では、どうすればそのIDを実際に取得できますか?どういうわけかjavascriptにその要求と共にcookieデータを送信させることができると思いましたが、2014年の自尊心のあるWebサイトにはhttpOnlyセッションcookieがあり、うまくいきません。どんな助けでも大歓迎です!
ここに私が使用しているサーバーのファイルのダウンロードリンクがあります http://www.4shared.com/rar/7RIos1tuce/PHPWebSocket-Chat-master.html
安全なcookieと同様にhttpのみのcookieは、websocketで正常に機能します。
一部のWebSocketモジュールは、リクエスト内のCookieを無視することを選択しているため、モジュールの仕様を読む必要があります。
試してください:websocketノード: https://github.com/Worlize/WebSocket-Node 。
Wss://xyz.comとして安全なwebsocketプロトコルを使用してください
また、chromeはを行いませんと、「要素の検査」の[ネットワーク]タブにCookieを表示します。
ノードで次のようなリクエストをダンプしてみてください:
wsServer.on('request', function(request) {
console.log(request);
console.log(request.cookies); // works in websocket node
}
ログのどこかにCookieが表示された場合は、それがわかります。
安全な専用Cookieを使用している場合は、安全なWebソケットにいる必要があります:wss://
Cookieは最初のリクエストで渡されます。 Chromeは、(常に)Cookie情報を省略した暫定ヘッダーを表示するため、常に表示しません。
Cookieで「何か」を行い、それらを各リクエストに添付するのは、WebSocketサーバーの責任です。
サーバーのコードを見る: https://github.com/Flynsarmy/PHPWebSocket-Chat/blob/master/class.PHPWebSocket.php 「cookie」という単語がどこにも表示されないので、うまくパッケージ化されておらず、各WebSocket接続に接続されていません。私は間違っている可能性があります。そのため、開発者に連絡して、ヘッダー全体が各接続にアタッチされているかどうか、およびそれにアクセスする方法を確認する必要があります。
これは確かです。安全なCookieを使用している場合、安全なWebソケットwss://mysite.com
を使用しない限り、Cookieは送信されません。プレーンws://mysite.com
は機能しません。
また、ドメインがウェブページと同じ場合、Cookieはリクエストでのみ送信されます。