【问题标题】:PHP Error session_start() and it says "Unable to clear session lock record"PHP 错误 session_start() 并显示“无法清除会话锁定记录”
【发布时间】:2019-05-16 11:38:41
【问题描述】:

我已经使用 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 并从数据库中加载发票...

【问题讨论】:

  • 我遇到了同样的问题,我通过在 php.ini 中禁用 session.lazy_write 解决了这个问题
  • 但是如何在主机中编辑 php.ini 文件?

标签: php-7.0


【解决方案1】:

设置以下 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);

【讨论】:

  • 我试过了,它确实让它变得不那么糟糕了。但我仍然看到错误每天弹出一次。你认为禁用lazy_write 也有帮助吗?我也看到有人提到了一个解决方案。
猜你喜欢
  • 2012-01-27
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 2011-03-14
相关资源
最近更新 更多