【问题标题】:PHP session_start(); has started hanging the serverPHP session_start();已经开始挂服务器
【发布时间】:2012-12-27 03:22:36
【问题描述】:

我有一个带有 Web 服务器和应用程序服务器的 DMZ,它们都在 gnome 下运行 Ubuntu(Web 服务器上的 v11.04 和应用程序服务器上的 v11.10)。 session_start() 已开始挂在应用服务器上。该代码位于应用程序服务器上,当我访问我的网站并访问带有session_start() 调用的页面时,它不会挂起。似乎每个session_start() 都开始挂在应用程序服务器上,尽管当我从其他计算机或通过网络访问相关页面时,我对相关页面没有任何问题。此外,我刚刚开始在应用程序服务器上遇到此问题,而没有对我的 php 代码进行任何更改。会不会是某个缓冲区已满,需要清空?

我尝试编辑/etc/php5/apache2/php.ini 和设置

session.save_path = "/tmp"

/tmp 存在。

但我仍然有问题。我可以通过在 session_start() 前面加上 session_end() 来阻止它挂起,但是它不会执行文件中剩余的 PHP 或 html 代码。

/var/log/apache2/error.log 包含以下消息:

PHP Notice:  A session had already been started - ignoring session_start() in
/var/www/DraculaPgm.php on line 101, referer: 
http://MyWebSite.com/ApplicationServer/Dracula.php

对此的任何帮助将不胜感激,
彼得。

2012 年 12 月 29 日更新

感谢所有回答此问题的人。不幸的是,我尝试了所有建议,但“session_start()”仍然挂起。但是,如果我将其放置几分钟,它会中断并显示以下错误消息。

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /ApplicationServer/Dracula.php.

Reason: Error reading from remote server

Apache/2.2.17 (Ubuntu) Server at MyWebSite.com Port 80

我在网络服务器上安装了 squid。这会是个问题吗?

谢谢,
彼得

【问题讨论】:

  • 为什么你的服务器使用 Gnome?
  • 没有像 session_end() 这样的函数,把它放进去你会得到一个终止脚本的致命错误。打开错误报告,因为它看起来像是关闭或不显示错误。
  • session_destroy() 用于结束会话
  • 你好像不止一次调用session_start(),或者是会话没有正确销毁造成的
  • 检查一个运行很长时间(或永远不会结束)的 php 脚本。一次只有 1 个脚本可以访问同一个用户会话,其他脚本将等待有问题的脚本完成。

标签: php session ubuntu-11.04


【解决方案1】:

这听起来像是配置问题。确保 PHP 正在报告所有错误,即 error_reporting(E_ALL) 并显示或记录所有错误。 (您甚至可能希望在您的 php.ini 中启用 display_startup_errors)——报告所有错误可能会阐明正在发生的事情。 (如果您需要帮助,您可以发布您从中获得的任何错误作为编辑)您可能还需要查看以下内容以解决会话问题:

或者,如果这些都没有显示任何内容,您可能需要阅读 https://bugs.php.net/bug.php?id=28856&edit=1 的错误报告,具体取决于您运行的 PHP 版本。

【讨论】:

  • 我试过了,但在 /var/log/apache2/error.log 中仍然没有收到任何错误消息。
【解决方案2】:

我将 'session_start()' 更改为以下块。

if(!isset($_SESSION))
{
    session_destroy();
    session_start();
}

我现在没有问题。我不敢说它解决了这个问题,因为它似乎没有立即解决它。

感谢大家的帮助,
彼得。

【讨论】:

  • 我用了这个,然后我把它注释掉了,挂起仍然发生。我的页面上也没有任何错误,这很奇怪。这个“黑客”现在必须要做。 +1
【解决方案3】:

尝试通过chmod 777 /tmp 更改/tmp 文件夹的权限并检查其是否工作。如果工作,则更改权限模式以使其更安全

试试看这个问题I call session_start() the script hangs and nothing happens

还有这个http://www.projectpier.org/node/1934

“似乎会话文件是独占打开的。在某些 场合(Windows)我发现文件锁没有被释放 无论出于何种原因正确,因此导致 session_start() 无限挂起任何未来的脚本执行。我绕过这个 问题是使用 session_set_save_handler() 并确保写入 函数使用 fopen($file, 'w') 而不是 fopen($file, 'x')"

如果您访问http://php.net/manual/en/function.session-start.php,您可以找到许多其他有相同问题的人及其解决方法

【讨论】:

    【解决方案4】:
    if(!isset($_SESSION)) 
    { 
        session_start(); 
    }
    

    在 PHP 文件的顶部使用它!

    供您参考:session_destroy() 用于结束会话。

    【讨论】:

    【解决方案5】:

    在此之前 - 尝试其他浏览器!

    我刚刚遇到了这个 session_start 问题。我检查了我的 tmp 文件夹和所有内容,我正要打电话给我的托管服务提供商,直到我认为我应该首先尝试另一个浏览器,因为它可能与会话 cookie 有关。

    我用的是chrome,所以我在IE中测试了一下,发现确实是这样:在其他浏览器上也可以用

    我关闭了 IE ;) - 回到 chrome,寻找 cookie (PHP_SESS_ID),将其删除,一切都恢复正常了!

    嗯,好的部分是 - 就像你们一样,我必须复习我对 -jay- session 的了解! ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2011-11-09
      • 1970-01-01
      相关资源
      最近更新 更多