函数session_start()问题(工作缓慢)

Ale*_*lex 5 php apache session execution-time

session_start()在主服务器上遇到了问题.当我第一次加载页面时,完成请求所需的时间不到1秒.如果我等待大约12-15秒然后重新加载页面,加载时间将是相同的.但是当我尝试刷新页面后,例如,在初始加载后3或5秒,服务器响应的时间等于10秒.

我做了一些测试来定义我的脚本中的瓶颈,我发现,该函数session_start()执行了9.8秒.我正在使用PEAR包HTTP_Session2.这是代码片段:

HTTP_Session2::useCookies(SESSION_USE_COOKIE);
/* Next line was added to make logging of execution time possible. */
self::writeToFile('HTTP_useCookies(1) -> '.self::getWorkTime()); 
HTTP_Session2::start("SID");
self::writeToFile('HTTP_start(2) -> '.self::getWorkTime());
HTTP_Session2::setExpire(time() + SESSION_EXPIRE);
self::writeToFile('HTTP_setExpire(3) -> '.self::getWorkTime());
Run Code Online (Sandbox Code Playgroud)

日志文本:

//First loading (13:34:35)
HTTP_useCookies(1) -> 0.00038
HTTP_start(2) -> 0.00077
HTTP_setExpire(3) -> 0.00090

// Second loading (13:34:39)(4 seconds later)
HTTP_useCookies(1) -> 0.00029
HTTP_start(2) -> <<<<<< 10.80752 >>>>>
HTTP_setExpire(3) -> <<<<<< 10.80780 >>>>>

//Third loading (13:34:56)
HTTP_useCookies(1) -> 0.00041
HTTP_start(2) -> 0.00071
HTTP_setExpire(3) -> 0.00083
Run Code Online (Sandbox Code Playgroud)

所以我发现,问题在于HTTP_Session2::start()功能.功能代码HTTP_Session2::start():

public function start($name = 'SessionID', $id = null)
{
  self::name($name);
  if (is_null(self::detectID())) {
    if ($id) {
      self::id($id);
    } else {
      self::id(uniqid(dechex(rand())));
    }
  }
  session_start();
  if (!isset($_SESSION['__HTTP_Session2_Info'])) {
    $_SESSION['__HTTP_Session2_Info'] = self::STARTED;
  } else {
    $_SESSION['__HTTP_Session2_Info'] = self::CONTINUED;
  }
}
Run Code Online (Sandbox Code Playgroud)

我无法理解时间延迟的原因是什么.可能是服务器上的Apache设置有误.或者,也许,对会话信息的文件有一些"锁定".

也许,有人已经遇到过这样的问题并且可以帮助解决它.

Pas*_*TIN 14

在PHP提供请求期间,包含会话信息的文件将被锁定.

因此,如果您有一个当前正在执行的PHP脚本(使用会话),并且同一用户发送另一个请求,则第二个请求将等到第一个请求完成.