Gateway::bindUid()时是否可以使用$GLOBALS来记录uid,和使用$_SESSION有什么区别

土豆没有皮

手册里说:onClose回调里无法使用Gateway::getUidByClientId()接口来获得uid,解决办法是在Gateway::bindUid()时记录一个$_SESSION,onClose的时候用$_SESSION来获得uid。
 
我在实际使用过程中曾用$GLOBALS来记录uid,发现有时不能正确的获得UID,是这两个变量有什么区别么?网上也未查阅到相关资料,求大神们指点下。

1956 2 0
2个回答

latin

按照我的理解,$GLOBALS 当前进程的所有连接共享,假设A连接设置了$GLOBALS=a, B连接再设置$GLOBALS=b,则之前被设置的值$GLOBALS=a被覆盖了,导致错乱了。
 
$_SESSION是记录当前连接的数据,用户间不共享。
 

  • 土豆没有皮 2019-09-19

    $GLOBALS["G".$client_id] ,每个$GLOBALS是根据client_id命名的,而client_id是唯一的,这样也会有覆盖情况么?

土豆没有皮

$GLOBALS ,每个$GLOBALS是根据client_id命名的,而client_id是唯一的,这样也会有覆盖情况么?

  • latin 2019-09-19

    这种不会覆盖,但是多个进程间$GLOBALS不是共享的,A进程设置了$GLOBALS["G".$client_id],B进程读不到

  • 土豆没有皮 2019-09-23

    @998:"$GLOBALS 当前进程的所有连接共享,$_SESSION是记录当前连接的数据”这个是那本书或文章的内容,求推荐下相关资料。

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