4

我已经使用 ajax 将一些数据加载到显示用户发票列表的 div 中。我必须开始会话才能获取用户 ID。它在本地主机 PHP 7.2 中工作正常,但在服务器 PHP 7.0 上它有时会说“无法清除会话锁定记录”,有时它会工作。谁能帮我解决这个问题,我将非常感谢...

我试图删除 session_start() 但它停止了我的所有代码。当我将服务器 PHP 7.0 更改为 5.0 时,它运行良好,但由于 PHP 的旧版本,我的其他一些库停止工作......

下面是在 div 中使用 ajax 获取的数据。并且 div 显示该警告。

<?php

session_start();

$assoc_id = $_SESSION['ayp_associate_id'];

include('../../../data/db.php');

if (isset($_POST['fetch_data'])) {

    $query = $conn->query("SELECT * FROM `transaction_details` WHERE `agentid` = '$assoc_id' ORDER BY `id` DESC LIMIT 300");

    if ($query->num_rows > 0) {
        while ($row = mysqli_fetch_assoc($query)) {

            $get_book = $conn->query("SELECT `packid` FROM `booking` WHERE `id` = " . $row['bookingid']);

            while ($book = mysqli_fetch_assoc($get_book)) {
                $pack_id = $book['packid'];
            }

            $get_pack = $conn->query("SELECT `package-name` FROM `packages` WHERE `id` = $pack_id");

            if ($get_pack == true) {
                while ($pack = mysqli_fetch_assoc($get_pack)) {
                    $package_name = $pack['package-name'];
                }
            } else {
                $package_name = "Unknown Package!";
            }

            echo "
            <div class='plate shadow bg_light-gray book_plate'>

                <div class='col_2-4'>
                    <h4>bk#" . $row['bookingid'] . " <span class='font_small'>$package_name</span></h4>
                    <p class='no_margin'>£ " . $row['total_amount'] . "</p>
                </div>

                <div class='col_2-4'>
                    <input onclick='show_invoice(" . $row['id'] . ");disable_bubbling(event);' type='button' class='btn btn_w-150 plate_btn float_right m-30-5 bg_default border_none border_radius-5 shadow show_details' value='Show Details'>
                </div>

            </div>
            ";
        }
    } else {
        echo "<div class='error_container'><center><h1>Nothing Found!</h1><p>We Didn't Found Any Invoice Data!</p></center></div>";
    }
}

?>

它应该只从会话中获取用户 ID 并从数据库中加载发票......

4

1 回答 1

2

设置以下 ini 设置(也直接来自 PHP)帮助我在高负载项目(约 300 个并发用户)中缓解此问题

    ini_set('memcached.sess_lock_retries', 10);
    ini_set('memcached.sess_lock_wait_min', 1000);
    ini_set('memcached.sess_lock_wait_max', 2000);
于 2020-03-16T17:24:14.310 回答