返回列表 发布新帖

高并发下论坛间歇性出现(Discuz! Database Error)Bug修复 New

73 0
发表于 前天 11:38 | 查看全部 阅读模式
Bug:高并发下,pre_common_session会员认证表的delete操作表锁冲突导致数据库连接数耗尽,适用X3.2、X3.4


Fix:
public function delete_by_session($session, $onlinehold, $guestspan) {
        if(!empty($session) && is_array($session)) {
                $onlinehold = time() - $onlinehold;
                $guestspan = time() - $guestspan;
                $session = daddslashes($session);


                $condition = " sid='{$session[sid]}' ";
                $condition .= " OR lastactivity$guestspan) ";
                $condition .= $session['uid'] ? " OR (uid='{$session['uid']}') " : '';
                //DB::delete('common_session', $condition);
               //fix by wangxj
                $query = DB::query("SELECT sid FROM ".DB::table('common_session')." WHERE $condition");
                $sids = array();
                while ($row = DB::fetch($query)) {
                        $sids[] = $row['sid'];
                }
                // 按主键sid删除
                if (!empty($sids)) {
                        DB::delete('common_session', DB::field('sid', $sids));
                }
        }
}


我知道答案 回答被采纳将会获得1 贡献 已有0人回答

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

5857225@qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Powered by Discuz! X5.0 Licensed 2022-2025 吾7分享 版权所有 All Rights Reserved. |网站地图|湘公网安备43112302000109号 ICP备案:湘ICP备19002042号-3
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表