php - 函数 session_start() 的问题(运行缓​​慢)

标签 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());

日志文本:

//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 设置有误。或者,也许,在具有 session 信息的文件上有一些“锁”。

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

最佳答案

包含 session 信息的文件在 PHP 服务请求期间被锁定。

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

关于php - 函数 session_start() 的问题(运行缓​​慢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1914242/

相关文章:

php - 傻瓜正则表达式

php - 将列名作为 json 对象属性公开是否存在安全风险?

apache - Tez 在 HDP 2.1 上崩溃

php - 如何从购物车页面的输入字段到管理订单详细信息页面获取值(value)?

javascript - PHP/Ajax : How to show/hide DIV on $_SESSION variable value?

php - 在 JW Player 中播放 Google Drive 视频并获取 Google Drive 视频的直接链接

PHP PDO 按列名分组查询结果

php - PHP 中的动态 .htaccess 文件

python - Flask Windows Apache 问题

java - 在请求之间用 spring 保持状态