最初,我只想驗證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