2017-10-09 181 views
0

我有一個PHP棘輪WebSocket服務器,在我的網站上運行自定義聊天室。獲取客戶端來自PHP棘輪WebSocket服務器的Cookie

我想,當他們連接到服務器,以獲得用戶的cookie,這樣我就可以得到他們的會話數據,並做一些特別的東西,如果他們登錄/有特定的權限/等

其他職位(在StackOverflow和其他方面),據說要獲取會話數據,您必須獲取客戶端的Cookie,這些Cookie會在其請求中提供給Web服務器。下面的代碼行是爲了做到這一點:

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

$connConnectionInterface

我的問題是,即使DevTools會顯示確實存在cookie,但運行時只會返回一個空數組。

爲什麼這不會返回一個值?

回答

0

以防萬一你還在尋找一個解決方案:

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 
}