gpt4 book ai didi

php - PHP中session_start是如何锁定的?

转载 作者:可可西里 更新时间:2023-11-01 12:56:17 27 4
gpt4 key购买 nike

最初,我只是想验证 session_start 锁定 session 。所以,我创建了一个 PHP 文件,如下所示。基本上,如果 pageview 是偶数,页面会休眠 10 秒;如果综合浏览量很奇怪,则不会。并且,session_start用于获取$_SESSION中的页面浏览量。

我试图在一个浏览器的两个选项卡中访问该页面。自从我明确让它休眠以来,第一个选项卡需要 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 是否从 PHP 页面中提取 session_start 并在其他 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'];

?>

最佳答案

这似乎是一个与 Firefox 相关的“问题”。如果您在两个选项卡/窗口中请求相同的 url,第二个请求将等待第一个请求完成(也可能是阻止第二个请求的插件,尚未测试)。
举个例子

<?php // test.php
$start = microtime(true);
echo "<pre>start: $start</pre>";
sleep(5);
$end = microtime(true);

echo '<pre>', $start, "\n", $end, "\n", $end-$start, '</pre>';

我调用了两次,输出是

start: 1269742677.6094

1269742677.6094
1269742682.609
4.9995958805084

start: 1269742682.6563

1269742682.6563
1269742687.6557
4.9994258880615

请注意,开始时间之间已经有 5 秒的间隔。

当被调用为 http://localhost/test.phphttp://localhost/test.php?a=b 而不是两次完全相同的 url这不会发生。
IE8 和 Chrome 都不显示该行为。

关于php - PHP中session_start是如何锁定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2531584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com