Ban đầu, tôi chỉ muốn xác minh rằng session_start khóa trên phiên. Vì vậy, tôi tạo một tệp PHP như dưới đây. Về cơ bản, nếu số lần truy cập trang thậm chí là trang sẽ ngủ trong 10 giây; nếu số lần truy cập trang là số lẻ, thì số lần xem trang lại không. Và, session_start được sử dụng để lấy chế độ xem trang trong $ _SESSION.Khóa session_start bằng PHP như thế nào?
Tôi đã cố gắng truy cập trang trong hai tab của một trình duyệt. Nó không phải là đáng ngạc nhiên rằng tab đầu tiên mất 10 giây kể từ khi tôi rõ ràng để cho nó ngủ. Tab thứ hai sẽ không ngủ, nhưng nó sẽ bị chặn bởi sessiont_start. Điều đó hoạt động như mong đợi.
Ngạc nhiên thay, đầu ra của trang thứ hai cho thấy session_start hầu như không mất thời gian. Trên thực tế, toàn bộ trang dường như không mất thời gian để tải. Tuy nhiên, trang này mất 10 giây để hiển thị trong trình duyệt.
obtained lock
Cost time: 0.00016689300537109
Start 1269739162.1997
End 1269739162.1998
allover time elpased : 0.00032305717468262
The page views: 101
Liệu trích PHP session_start ra khỏi trang PHP và thực hiện nó trước khi báo cáo PHP khác?
Đây là mã.
<?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'];
?>
Lưu ý microtime (1) tham số hữu ích, làm cho hàm float_time lỗi thời. –
So sánh hai giá trị 'Bắt đầu'. Ví dụ thứ hai "bắt đầu" 10 giây sau lần đầu tiên? – VolkerK
Tôi không thể xác nhận kết quả của bạn. Bằng cách nhấn tải lại trong cả hai tab cho cả yêu cầu, tôi đã chạy 10 giây đầu tiên và 8 giây khác như mong đợi. Trình duyệt Chrome, PHP5.2.5, giành chiến thắng –