【发布时间】:2010-12-08 18:11:17
【问题描述】:
我无法在需要时重现此异常。它只是偶尔发生一次,在测试站点导航时。它可能发生在任何页面,无论用户是否登录,没有 问题。
由于这个错误完全丢失。
至少,我可以帮忙看看我应该去哪里看看有什么问题吗?
在 Zend 中,我们在哪里设置临时目录来存储会话变量?
谢谢,
内存
【问题讨论】:
我无法在需要时重现此异常。它只是偶尔发生一次,在测试站点导航时。它可能发生在任何页面,无论用户是否登录,没有 问题。
由于这个错误完全丢失。
至少,我可以帮忙看看我应该去哪里看看有什么问题吗?
在 Zend 中,我们在哪里设置临时目录来存储会话变量?
谢谢,
内存
【问题讨论】:
我最近在 Dreamhost 上遇到了这个问题。我把它归结为会话路径不可写。我向 Dreamhost 支持发送了电子邮件,但他们没有响应,因此我需要更改会话在文件系统中的保存路径。
在 application.ini 中:
resources.session.save_path = APPLICATION_PATH "/../tmp/session"
这为我修复了异常。我希望它也适合你!
【讨论】:
首先,确保 php 没有自动启动。
php.ini (or ini_set in your index.php):
session.auto_start = 0
其次,在必须使用之前不要使用 session_start() 或 Zend_Session::start()。如果你确实使用它们,你只能使用它们一次,否则你会得到一个会话已经开始的错误。
第三,尽量只在需要的时候使用 Zend_Session_Namespace,甚至不使用上面的启动命令。 (主要在控制器中)
第四,你可以使用你的application.ini配置会话资源
resources.session.save_path = APPLICATION_PATH "/../data/session"
resources.session.use_only_cookies = true
resources.session.remember_me_seconds = 864000
有关资源的更多信息: http://framework.zend.com/manual/en/learning.multiuser.sessions.html
希望对您有所帮助:)
【讨论】:
这似乎与 Zend 尝试执行的会话清理任务有关。默认情况下,apache 仅具有对会话目录的写入权限(在 Ubuntu 机器上,它将是 /var/lib/php5)。这会导致清理失败,从而导致间歇性 HTTP/500 错误。
最简单的方法是通过以下任一方式授予对 apache 的读取权限
chmod a+r /var/lib/php5chgrp www-data /var/lib/php5; chmod g+r /var/lib/php5以上命令假设您运行的是 Ubuntu。在其他发行版中,调整用户名/路径。
【讨论】:
当session_start() 在Zend_Session::start() 之前被调用,或者启用了PHP 配置标志session_auto_start 时,会发生此错误。确保该标志被禁用并且您的代码(或您使用的任何库,除了 ZF)没有调用 session_start()。
【讨论】:
如果您正在使用 RPCL 库 (RADPHP) 开发应用程序并收到此错误:
应用程序引发了异常类 Zend_Session_Exception,消息为“会话已由 session.auto-start 或 session_start() 启动”,
那么这是我的解决方案。
您会惊讶于它是多么简单。简单的包含行
require_once("zcommon.inc.php");
就在包含 ZAuth 组件的文件中的开始 PHP 标记之后——通常这是具有 DataModule 形式的文件。当然,请确保文件 zcommon.inc.php 在您的路径中。这将确保 Zend 会话将首先启动,而不是 RPCL 会话。
还要使应用程序中的 php 文件的名称与包含的类的名称相对应。
【讨论】:
您使用的是 Debian/Ubuntu 机器吗?
如果是这样,您的问题可能与会话的自动垃圾收集有关。 尝试通过在 php.ini 文件中设置来禁用它:
session.gc_probability = 0
请参阅http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage 了解更多信息。
【讨论】:
照阿伦说的做补充:
resources.session.save_path = APPLICATION_PATH "/../temp/session"
到应用程序 ini。确保您拥有该文件夹。为我工作!
我还补充了:
phpSettings.session.auto_start = 0
到应用程序 ini。不确定这是否有帮助。
【讨论】: