我使用PHP会话来存储有关访问者来自的来源类型的信息。该错误可以是One
,Two
或Other
,取决于他们的a
参数(如果已设置),一旦他们到达网站。
这些访问者总是会到达a.php
这样的页面,该页面始终具有以下代码模式:
<?php
session_start();
// Store the first Source visitor arrived from, in session:
if (empty($_SESSION['source'])) {
if(isset($_GET['a']));
switch ($_GET['a']) {
case "1":
$_SESSION['source'] = "One";
break;
case "2":
$_SESSION['source'] = "Two";
break;
default:
$_SESSION['source'] = "Other";
}
}
?>
据我了解,此代码不会为$_SESSION['source']
保留空的选项。
然后,在a.php
内,我有b.php
的链接,它处理该会话变量中的信息,并使用以下代码将其存储在某个数据库中:
<?php
session_start();
$src=$_SESSION['source']; // Get source from session
// some code to store $src value in a datbase //
?>
当我查看数据库时,这个配置一直在运行,因为我已经在一个月前完成了这个配置,因为每个访问者总是从这3个可能的源值中获得一些价值。
然而,昨天,我注意到一个故障,因为有3个不同的访问者(15个去过b.php
,有3个不同的用户代理,没有为他们的来源记录任何值。
我认为这个问题可能只是由于某种信息丢失造成的,可能是从a.php
转移到b.php
,但我不知道突然之间怎么可能,我没有在代码中做任何改变,它已经工作了1000多次,突然在一天之内,它对20%的访问者都没有用。
我在VPS服务器上,每天都会收到一些Cron Daemon电子邮件,其中包含正在制作的验证/更新列表,也许昨天它会对会话的工作方式进行一些自动更改?
以下是我当前的PHP.INI
配置:
在我的/tmp
文件夹中,我确实看到当前会话正确存储了所有信息,因此不确定如何进一步调查此问题。故障会话已从文件夹中删除。