2017-10-09 12 views
0

私はウェブサイト上でカスタムチャットルームを実行するPHPラチェットWebSocketサーバーを持っています。クライアントを取得するPHPラチェットWebSocketサーバーからのクッキー

彼らは他の記事では、特定の許可/など

を持っているに/ログインしている場合、私は、彼らがサーバーに接続するとき、私は彼らのセッションデータを取得し、特別な何かを行うことができますように、ユーザーのクッキーを取得したいと思います(StackOverflowとそれ以外の場合)、セッションデータを取得するには、Webサーバーへの要求で提供されるクライアントのCookieを取得する必要があります。 $connConnectionInterfaceある

$conn->WebSocket->request->getCookies() 

:次のコード行は、これを実行するためのものです。

私の問題は、DevToolsが本当にクッキーがあることを示しているにもかかわらず、これを実行すると空の配列が返されるということです。

なぜこの値が返されないのですか?

答えて

0

念のためにあなたはまだ解決策を探している:特定のドメイン/サブドメインのクッキーが唯一の有効な

1.In場合 - あなたは、同じアドレスの上にWebSocketのサーバーへの接続を確立すべきです。 たとえば、admin.example.comにのみ有効なCookieは、ルートドメイン(example.com)のWebSocketサーバーに送信されません。

2.クッキーが安全な接続(https://)のみで有効な場合、WebSocketサーバーは安全な接続(wss://)を超えている必要があります。これは最新のラチェットバージョン。

$webSock = new React\Socket\Server('0.0.0.0:8443', $loop); 
$webSock = new React\Socket\SecureServer($webSock, $loop, [ 
    'local_cert'  => 'path_to_server_cert', 
    'local_pk'   => 'path_to_private_key', 
    //'allow_self_signed' => TRUE, 
    'verify_peer' => FALSE 
]); 

3.ラチェット0.4.xでは、もはやクッキーパーサーがありません。 生の文字列としてしか取得できず、自分で解析することができます。

ラチェット0.4.xで&パースのクッキーを取得します。

$cookiesRaw = $conn->httpRequest->getHeader('Cookie'); 

if(count($cookiesRaw)) { 
    $cookiesArr = \GuzzleHttp\Psr7\parse_header($cookiesRaw)[0]; // Array of cookies 
} 
関連する問題