为什么在设置$ _SESSION值时会看到执行超时?

Kev*_*Kev 5 php iis session iis-6

我在PHP错误日志中看到以下错误:

PHP Fatal error: Maximum execution time of 60 seconds exceeded in D:\sites\s105504\www\index.php on line 3
PHP Fatal error: Maximum execution time of 60 seconds exceeded in D:\sites\s105504\www\search.php on line 4

有问题的行是:

index.php文件:

01 <?php
02 session_start();
03 ob_start();
04 error_reporting(E_All);
05 $_SESSION['nav'] = "range";  // <-- Error generated here
Run Code Online (Sandbox Code Playgroud)

search.php中

01 <?php
02 
03 session_start();
04 $_SESSION['nav'] = "range";
05 $_SESSION['navselected'] = 21; // <-- Error generated here
Run Code Online (Sandbox Code Playgroud)

分配一个$_SESSION[]值真的需要60多秒吗?

该平台是:

  • Windows 2003 SP2 + IIS6
  • 适用于Windows 2003的FastCGI(原始RTM版本)
  • PHP 5.2.6非线程安全的构建

会话过期时,在服务器上清除会话数据文件没有任何问题.sess_XXXXXXXXXXXXXX我看到的最古老的文件大概是2个小时左右.

事件日志或其他可能表示难以创建会话数据文件的磁盘运行状况问题中没有明显的磁盘超时.

该站点也在一个没有负载的服务器上.该网站很忙,但没有受到重创,反应灵敏.只是我们每三到四个小时连续三到四次出现这些错误.

我还应该补充一点,我不是这段代码的原始开发者,而且它属于开发人员早已离职的客户.

irc*_*ell 9

会话阻塞. session_start()将阻止执行,直到它可以获得该特定会话文件的独占锁定.这是为了防止并发问题的出现.您可以通过session_write_close()在每个脚本中完成会话时发出一个来解决它.您在下一行看到它的原因是session_start()>大于最大执行时间的块.所以当它返回时,下一行在时间限制之后执行,这就是引发错误的地方.

有关更多信息,请参阅:session_write_close()

哦,根据您发布的错误,错误分别在行ob_start();$_SESSION['nav'] = "range";行生成,而不是您在代码部分中指示的第5行...