Gateway 下保存session数据问题

程晓冬

按照手册的操作

public onMessage($client_id, $message)
{
    $group = 'room-1';
    $_SESSION = $message;
    $_SESSION = $message;
    Gateway::joinGroup($client_id, $group);
    var_export(Gateway::getClientSessionsByGroup($group));
}

应该打印出来是

array(
    '7f00000108fc00000008' => array('name'=>'Tom', 'sex'=>1),
    '7f00000108fc00000009' => array('name'=>'Joan', 'sex'=>0),
)

但是我打印的只有client_id
win下 laravel框架
这是为什么,感谢

6901 1 0
1个回答

walkor
use \GatewayWorker\Lib\Gateway;
class Events
{
    ...
    public onMessage($client_id, $message)
    {
        $group = 'room-1';
        $_SESSION = $message;
        $_SESSION = $message;
        Gateway::joinGroup($client_id, $group);
        var_export(Gateway::getClientSessionsByGroup($group));
    }
    ...
}

手册里的教程是在GatewayWorker容器里的,是在Events.php里操作GatewayWorker容器对应客户端的$_SESSION变量。所以可以正常返回。

你的代码是在是在apache/php-fpm环境这样的webserver容器里的,
利用GatewayClient远程操作GatewayWorker。直接用$_SESSION变量只会影响本地apache/php-fpm,
对于远程GatewayWorker不会有效。Gateway手册http://doc2.workerman.net/326141也有讲到webserver里的$_SESSION和GatewayWorker是不互通的。

虽然GatewayClient不能通过$_SESSION变量来操作GatewayWorker的session,
但是仍然可以通过Gateway::setSession/getSession/updateSession接口远程操作GatewayWorker的session,参见http://doc2.workerman.net/326149。所以把$_SESSION操作换成响应的接口即可。

年代过于久远,无法发表回答
🔝