查看: 78|回复: 0

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

[复制链接]

128

主题

370

回帖

595

积分

高级会员

积分
595
发表于 2025-4-17 19:26:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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<$onlinehold ";
                $condition .= " OR (uid='0' AND ip1='{$session['ip1']}' AND ip2='{$session['ip2']}' AND ip3='{$session['ip3']}' AND ip4='{$session['ip4']}' AND 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.本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
2.如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

上一篇:多米应用(Discuz! X to UniApp)的Cursor AI rules分享 New
下一篇:美化你的电脑小黑屋,像牢房一样的美化 New

回复

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表