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