@NoName7133

Почему не передаются сессии на websocket сервер?

Почему могут не передаваться сессии на websocket сервер? При авторизации на сайте, я сохраняю данные пользователя в сессии, затем, мне нужно их передать на websocket сервер, но как бы я ни пытался, сессии пустые.
код server.php:
<?php
    use Ratchet\Server\IoServer;
    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;
    use MyApp\Chat;


    require dirname(__DIR__) . '/chat/vendor/autoload.php';

    $server = IoServer::factory(new HttpServer(new WsServer(new Chat()), 8080));

    $server->run();

код, где не передаются сессии:
<?php
    namespace MyApp;
    require "D:/OpenServer/OSPanel/domains/App/db.php";
    use Ratchet\MessageComponentInterface;
    use Ratchet\ConnectionInterface;
    use MyApp\Entities\Message;

    if(isset($_SESSION['logged_user']->login)) {
      echo "true" ;
    }
    else {
      echo "false ";
    }
    //код...

Все ссылки правильные, сессии не передаются только на websocket сервер
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ответы на вопрос 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
Таааааааааааааак, хорошооооооооо, а к чему вы думаете закрепляются сессии? Напомню, что когда приходит http запрос на веб-сервер, он создает новый процесс пыха и подсовывает ему нужные данные. Ваш websocket сервер же - один единственный процесс, который никогда не подыхает, и никто ему ничего не подсовывает. Вопрос: откуда ему знать, что за данные вы хотите от него получить?

Вам прийдется написать отдельную систему авторизации для сокет-сервера, и.е. на фронте передавать какой-то параметр во время/после подключения сокет-серверу, содержащий информацию, с помощью которой можно секьюрно идентифицировать пользователя (кука, jwt, какой-то api ключ), после чего сокет-сервер должен как-то проверить эту информацию и куда-то сохранить инфу (в памяти), что "такое-то соедение пришло от юзера такого то".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы