久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

返回列表 發帖
查看: 310|回復: 0

高并發下論壇間歇性出現(Discuz! Database Error)Bug修復

1

主題

1

回帖

8

積分

初學乍練

貢獻
0 點
金幣
5 個
樓主
發表于 2025-4-17 10:51:51 | 只看樓主 |倒序瀏覽 |閱讀模式
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));
                }
        }
}


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

  • 關注公眾號
  • 有償服務微信
  • 有償服務QQ

手機版|小黑屋|Discuz! 官方交流社區 ( 皖ICP備16010102號 |皖公網安備34010302002376號 )|網站地圖|star

GMT+8, 2025-7-2 03:32 , Processed in 0.048352 second(s), 12 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2025 Discuz! Team.

關燈 在本版發帖
有償服務QQ
有償服務微信
返回頂部
快速回復 返回頂部 返回列表