获取客户端来自PHP棘轮WebSocket服务器的Cookie

获取客户端来自PHP棘轮WebSocket服务器的Cookie

问题描述:

我有一个PHP棘轮WebSocket服务器,在我的网站上运行自定义聊天室。获取客户端来自PHP棘轮WebSocket服务器的Cookie

我想,当他们连接到服务器,以获得用户的cookie,这样我就可以得到他们的会话数据,并做一些特别的东西,如果他们登录/有特定的权限/等

其他职位(在*和其他方面),据说要获取会话数据,您必须获取客户端的Cookie,这些Cookie会在其请求中提供给Web服务器。下面的代码行是为了做到这一点:

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

$connConnectionInterface

我的问题是,即使DevTools会显示确实存在cookie,但运行时只会返回一个空数组。

为什么这不会返回一个值?

以防万一你还在寻找一个解决方案:

1.In情况下,你的Cookie只适用于一个特定的站点/子 - 你应该建立在同一地址连接到您的WebSocket服务器。 例如,仅对admin.example.com有效的cookie不会发送到根域(example.com)上的WebSocket服务器。

2.如果您的cookie只对安全连接(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.With Ratchet 0.4.x,不再有cookie解析器。 你只能将它作为一个原始字符串,然后自己解析它。

获取与棘轮0.4.x &解析饼干:

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

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