GatewayWorker中,无法在onClose回调函数里获取到$_SESSION变量

江月闲谈
public static function onClose($client_id) {
    if(array_key_exists('uid',$_SESSION)) {
        // do something
    }
}

环境: Workerman: 4.0.19, PHP :7.4.21,nginx: 1.20.1
大概逻辑如上述代码,有时会提示: array_key_exists() expects parameter 2 to be array, null given。
有大神碰到过这问题吗?

699 1 0
1个回答

blogdaren

可能原因:
一般我们都是在onMessage里设置$_SESSION,但是有的客户端成功连接之后并未发送任何数据就关闭了连接,这就导致可能onClose回调里$_SESSION为空,所以从这个角度看是正常的。
解决方案:

if(!empty($_SESSION) && array_key_exists('uid',$_SESSION))
  • 江月闲谈 2021-08-02

    非常感谢。刚才在帖里看到类似的解决办法。不过我这里在onConnect里就设置了$_SESSION['connectTime'],onClos里有时还是会出现没有$_SESSION变量的情况。

  • 江月闲谈 2021-08-02

    不知道是怎么回事

  • blogdaren 2021-08-03

    在onConnect里设置的话的应该不会发生这种问题的、检查下业务代码、写下session的日志跟踪下。

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