获取客户端来自PHP棘轮WebSocket服务器的Cookie
问题描述:
我有一个PHP棘轮WebSocket服务器,在我的网站上运行自定义聊天室。获取客户端来自PHP棘轮WebSocket服务器的Cookie
我想,当他们连接到服务器,以获得用户的cookie,这样我就可以得到他们的会话数据,并做一些特别的东西,如果他们登录/有特定的权限/等
其他职位(在StackOverflow和其他方面),据说要获取会话数据,您必须获取客户端的Cookie,这些Cookie会在其请求中提供给Web服务器。下面的代码行是为了做到这一点:
$conn->WebSocket->request->getCookies()
凡$conn
是ConnectionInterface
。
我的问题是,即使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
}