从 PHP Ratchet WebSocket 服务器获取客户端 Cookie

Getting the clients Cookies from a PHP Ratchet WebSocket Server

我有一个 PHP Ratchet WebSocket 服务器,运行在我的网站上设置了一个自定义聊天室。

我想在用户连接到服务器时获取他们的 cookie,这样我就可以获取他们的会话数据并在他们已登录/具有特定权限等情况下执行一些特殊操作

在其他帖子(包括 Whosebug 和其他帖子)中,据说要获取会话数据,您必须获取客户端的 cookie,这些 cookie 在他们对 Web 服务器的请求中提供。以下代码行用于执行此操作:

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

其中 $connConnectionInterface

我的问题是,当 运行 这只是一个空数组时 returns,即使 DevTools 会显示确实有 cookie。

为什么这可能没有返回值?

以防万一您仍在寻找解决方案:

1.In 如果您的 cookie 仅对特定 domain/subdomain 有效 - 您应该通过同一地址建立与 WebSocket 服务器的连接。 例如,仅对 admin.example.com 有效的 cookie 不会发送到根域 (example.com) 上的 WebSocket 服务器。

2.In 如果您的 cookie 仅对安全连接 (https://) 有效,您的 WebSocket 服务器也应该通过安全连接 (wss://),这很容易实现最新的 Ratchet 版本。

$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.With 棘轮 0.4.x,不再有 cookie 解析器。 只能以原始字符串的形式获取,然后自己解析。

使用 Ratchet 0 获取和解析 cookie。4.x :

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

if(count($cookiesRaw)) {
    $cookiesArr = \GuzzleHttp\Psr7\parse_header($cookiesRaw)[0]; // Array of cookies
}