最初,我只想验证session_start锁定会话。所以,我创建一个PHP文件如下。基本上,如果浏览量是均匀的,页面会睡10秒;如果综合浏览量很奇怪,则不会。并且,session_start用于获取中的页面视图$ _SESSION。PHP中session_start如何锁定?
我试图访问一个浏览器的两个选项卡中的页面。第一个标签在我明确让它入睡之后需要10秒钟就不足为奇了。第二个标签不会睡觉,但应该被sessiont_start阻止。这按预期工作。
令我惊讶的是,第二页的输出显示session_start几乎没有时间。实际上,整个页面似乎没有时间加载。但是,该页面在浏览器中显示需要10秒钟。
obtained lock
Cost time: 0.00016689300537109
Start 1269739162.1997
End 1269739162.1998
allover time elpased : 0.00032305717468262
The page views: 101
PHP是否提取在session_start了PHP页面之前其他PHP语句执行呢?
这是代码。
<?php
function float_time()
{
list($usec, $sec) = explode(' ', microtime());
return (float)$sec + (float)$usec;
}
$allover_start_time = float_time();
$start_time = float_time();
session_start();
echo "obtained lock<br/>";
$end_time = float_time();
$elapsed_time = $end_time - $start_time;
echo "Cost time: $elapsed_time <br>";
echo "Start $start_time<br/>";
echo "End $end_time<br/>";
ob_flush();
flush();
if (isset($_SESSION['views']))
{
$_SESSION['views'] += 1;
}
else
{
$_SESSION['views'] = 0;
}
if ($_SESSION['views'] % 2 == 0)
{
echo "sleep 10 seconds<br/>";
sleep(10);
}
$allover_end_time = float_time();
echo "allover time elpased : " . ($allover_end_time - $allover_start_time) . "<br/>";
echo "The page views: " . $_SESSION['views'];
?>
注意microtime(1)有用的参数,使float_time函数过时。 – 2010-03-28 01:36:43
比较两个“开始”值。第二个例子在第一个例子10秒后“开始”吗? – VolkerK 2010-03-28 01:39:52
我无法确认你的结果。通过在两个选项卡中重新加载以获得更多请求,我首先按预期运行10秒和其他8秒。浏览器Chrome,PHP5.2.5,Win – 2010-03-28 01:44:09