PHP$会话变量不';当连续快速调用时,不总是递增

PHP$会话变量不';当连续快速调用时,不总是递增,php,session,tabs,Php,Session,Tabs,我在PHP$\u会话中遇到了一个小错误。当我在我的Ubuntu 20.04、Apache 2.4.41、PHP 7.4.3本地开发服务器上的chromium 85浏览器中同时打开12个以上的选项卡时,我注意到PHP$\u会话并不总是增加我的tabid变量,我使用它为每个选项卡提供自己的id。 假设我有以下页面: session_start(); if (! isset($_SESSION['tabid'])) $_SESSION['tabid'] = 0; ++$_SES

我在PHP$\u会话中遇到了一个小错误。当我在我的Ubuntu 20.04、Apache 2.4.41、PHP 7.4.3本地开发服务器上的chromium 85浏览器中同时打开12个以上的选项卡时,我注意到PHP$\u会话并不总是增加我的tabid变量,我使用它为每个选项卡提供自己的id。 假设我有以下页面:

    session_start();
    if (! isset($_SESSION['tabid'])) $_SESSION['tabid'] = 0;
    ++$_SESSION['tabid'];

    define('TABID', $_SESSION['tabid']);
    echo TABID;
当我在12个以上的标签中打开它时,我会在每一页上看到:1、1、2、3、2、3、4、3、5、6、7、8

我的12个以上标签上的预期输出是:1、2、3、4、5、6、7、8、9、10、11、12

我尝试了很多方法来调试它,甚至尝试通过这样做来增加会话:

    $_SESSION['tabid'] = ($_SESSION['tabid'] *2)+2; 
    $_SESSION['tabid']= $_SESSION['tabid']/2;
只是想看看会话是否没有记录简单的增量更改,但这似乎没有产生持久的效果。我甚至在输出中添加了一个uniqid()来测试这个bug,以确保它是一个$\u会话问题。因此,将最后一行更改为:

    echo TABID."-".uniqid();
仍然会输出如下内容:

1-5f5bb8d8a70fa,1-5f5bb8d8a70fe,2-5f5bb8d8a70ff,3-5f5bb8d8a7100,2-5f5bb8d8a7101,3-5f5bb8d8a7102,4-5f5bb8d8a7103,5-5f5bb8d8a7104,6-5f5bb8d8a7105,7-5F5BB8D8D8A7106,6-5F5BB8D8D8A7107

这仍然是错误/意外的行为

同时,我可能会使用uniqid作为我的选项卡ID,但出于一些原因,我更希望我的选项卡ID短得多

以下是我的会话设置(它们是安装时附带的默认设置):


如果有人知道这是为什么,或者如果你知道这是由于某种背景,我很想知道。谢谢。

纯粹出于好奇,您为什么要计算标签的数量?您可以通过添加睡眠(10)来更清楚地测试这一点。基本上,这是一个竞争条件,php读取会话文件,并在脚本执行完成时将其写回。如果五个php同时启动(在任何一个完成之前),那么它们都会读“1”,写“2”。
    Session Support     enabled
    Registered save handlers    files user
    Registered serializer handlers  php_serialize php php_binary
    Directive   Local Value Master Value
    session.auto_start  Off Off
    session.cache_expire    180 180
    session.cache_limiter   nocache nocache
    session.cookie_domain   no value    no value
    session.cookie_httponly no value    no value
    session.cookie_lifetime 0   0
    session.cookie_path /   /
    session.cookie_samesite no value    no value
    session.cookie_secure   0   0
    session.gc_divisor  1000    1000
    session.gc_maxlifetime  1440    1440
    session.gc_probability  0   0
    session.lazy_write  On  On
    session.name    PHPSESSID   PHPSESSID
    session.referer_check   no value    no value
    session.save_handler    files   files
    session.save_path   /var/lib/php/sessions   /var/lib/php/sessions
    session.serialize_handler   php php
    session.sid_bits_per_character  5   5
    session.sid_length  26  26
    session.upload_progress.cleanup On  On
    session.upload_progress.enabled On  On
    session.upload_progress.freq    1%  1%
    session.upload_progress.min_freq    1   1
    session.upload_progress.name    PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
    session.upload_progress.prefix  upload_progress_    upload_progress_
    session.use_cookies 1   1
    session.use_only_cookies    1   1
    session.use_strict_mode 0   0
    session.use_trans_sid   0   0