问题与functionsession_start()(工作缓慢)

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

我做了一些testing来定义我的脚本中的一个瓶颈,我发现,函数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()); 

日志文本:

 //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 

所以我发现,这个问题在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; } } 

我不明白延误的原因是什么。 可能在服务器上有错误的Apache设置。 或者,也许,会话信息的文件上有一些“locking”。

也许,有人已经遇到了这样的问题,可以帮助解决这个问题。

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

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