Toa*_*gma 3 php cookies websocket ratchet
我有一个 PHP Ratchet WebSocket 服务器,在我的网站上运行自定义聊天室。
我想在用户连接到服务器时获取用户的 cookie,以便我可以获取他们的会话数据,并在他们登录/具有特定权限/等时执行一些特殊操作。
在其他帖子(StackOverflow 和其他帖子)中,据说要获取会话数据,您必须获取客户端的 cookie,这些 cookie 在向 Web 服务器的请求中提供。以下代码行旨在执行此操作:
$conn->WebSocket->request->getCookies()
Run Code Online (Sandbox Code Playgroud)
哪里$conn有一个ConnectionInterface.
我的问题是,当运行时,它只是返回一个空数组,即使 DevTools 会显示确实有 cookie。
为什么这可能不会返回值?
小智 5
以防万一您仍在寻找解决方案:
1.如果您的 cookie 仅对特定域/子域有效 - 您应该通过同一地址建立与 WebSocket 服务器的连接。例如,仅对 admin.example.com 有效的 cookie 不会发送到根域 (example.com) 上的 WebSocket 服务器。
2.如果您的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
]);
Run Code Online (Sandbox Code Playgroud)
3.在 Ratchet 0.4.x 中,不再有 cookie 解析器。您只能将其作为原始字符串获取,然后自行解析。
使用 Ratchet 0.4.x 获取并解析 cookie:
$cookiesRaw = $conn->httpRequest->getHeader('Cookie');
if(count($cookiesRaw)) {
$cookiesArr = \GuzzleHttp\Psr7\parse_header($cookiesRaw)[0]; // Array of cookies
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2438 次 |
| 最近记录: |