国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

session設(shè)置和獲取的bug,如果session數(shù)組中存在一個二維數(shù)組 用updateSession函數(shù)對本鏈接更新那個二維數(shù)組會有bug

479820787

先初始化當(dāng)前client_id的session 為array('id'=>'1','group'=>array('a'=>'aaa','b'=>'bbb'));
然后調(diào)用 Gateway::updateSession更新當(dāng)前client_id的session傳入?yún)?shù)array('group'=>array('c'=>'ccc'))
這時候當(dāng)前鏈接的全局變量$_SESSION的值變?yōu)榱薬rray('id'=>'1','group'=>array('c'=>'ccc'));
當(dāng)前client_id或其他鏈接調(diào)用Gateway::getSession獲取這個鏈接的session拿到的值為
array('id'=>'1','group'=>array('a'=>'aaa','b'=>'bbb','c'=>'ccc'));
查看原因應(yīng)該是\vendor\workerman\gateway-worker\src\Lib\Gateway.php 中的updateSession函數(shù)對$_SESSION做的操作是$_SESSION = $session + (array)$_SESSION;(見附件1)
而接收請求函數(shù)vendor\workerman\gateway-worker\src\Gateway.php中的onWorkerMessage()函數(shù)接收到到更新session的請求后,對session做的處理方式是(見附件2)

$session = Context::sessionDecode($this->_clientConnections->session);
$session_for_merge = Context::sessionDecode($data);
$session = array_replace_recursive($session, $session_for_merge);
$this->_clientConnections->session = Context::sessionEncode($session);

結(jié)果就導(dǎo)致 $this->_clientConnections->session 和$_SESSION不一致處理失敗 不明白作者為什么不用同一個函數(shù)處理session數(shù)組。也不敢輕易改動源碼希望作者看到后講解下是不是改掉$_SESSION = $session + (array)$_SESSION;就能好。

3604 1 0
1個回答

walkor 打賞

感謝反饋,已經(jīng)修復(fù),更新GatewayWorker到 3.0.11。 對workerman無影響

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??