会话自动启动或session_start()已启动意外的异常会话

时间:2010-12-08 18:11:17

标签: zend-framework exception

我想要的时候无法重现这个异常。它只是偶尔发生一次,同时测试网站导航。它可能发生在任何页面,没有用户登录或不登录,没有 物质

完全失败了这个错误。

我是否至少可以帮助我了解哪些内容可以查看可能出现的问题?

在Zend中我们在哪里设置临时目录来存储会话变量?

谢谢,
MEM

7 个答案:

答案 0 :(得分:4)

我最近在Dreamhost上遇到了这个问题。我把它煮到会话路径是不可写的。我通过电子邮件发送了Dreamhost支持,他们没有响应,因此我需要更改文件系统中保存会话的路径。

app.ini中的

resources.session.save_path = APPLICATION_PATH "/../tmp/session"

这为我解决了例外。我希望它对你也有用!

答案 1 :(得分:2)

首先,确保php不会自动启动。

php.ini (or ini_set in your index.php):
session.auto_start = 0

其次,在必要之前不要使用session_start()或Zend_Session :: start()。如果你确实使用它们,你只能使用它们一次,否则你会得到一个已经启动的会话错误。

第三,尝试仅在需要时使用Zend_Session_Namespace,甚至不使用上面的start命令。 (主要是在控制者中)

第四,您可以使用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

希望这有助于:)

答案 2 :(得分:1)

这似乎与Zend尝试执行的会话清理任务有关。默认情况下,apache只对会话目录具有写访问权限(在Ubuntu框中,它将是/ var / lib / php5)。这会导致清理失败,从而导致间歇性的HTTP / 500错误。

最简单的方法是通过执行

之一来提供对apache的读访问权限
  1. chmod a+r /var/lib/php5
  2. chgrp www-data /var/lib/php5; chmod g+r /var/lib/php5
  3. 以上命令假设您正在运行Ubuntu。在其他发行版中,调整用户名/路径。

答案 3 :(得分:0)

session_start()之前调用Zend_Session::start()或启用PHP配置标志session_auto_start时,会发生此错误。确保禁用该标志,并且您的代码(或您使用的任何库,除了ZF)未调用session_start()

答案 4 :(得分:0)

如果您正在使用 RPCL 库( RADPHP )开发应用程序,并且您收到此错误:

  

应用程序引发了一个异常类Zend_Session_Exception,消息'session已经由session.auto-start或session_start()'启动,

然后这是我的解决方案。

你会惊讶它有多简单。简单包括行

  

require_once( “zcommon.inc.php”);

在包含 ZAuth 组件的文件中打开PHP标记之后 - 通常这是具有 DataModule 形式的文件。当然要确保文件 zcommon.inc.php 在您的路径中。这将确保Zend会话首先启动而不是RPCL会话。

还要使应用程序中php文件的名称与包含类的名称相对应。

答案 5 :(得分:0)

您使用的是Debian / Ubuntu机器吗?

如果是这样,您的问题可能与会话的自动垃圾收集有关。 尝试通过在php.ini文件中设置它来禁用它:

session.gc_probability = 0

有关详细信息,请参阅http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

答案 6 :(得分:0)

做Aron所说的补充:

resources.session.save_path = APPLICATION_PATH "/../temp/session"

申请ini。确保你有这个文件夹。为我工作!

我还补充说:

phpSettings.session.auto_start = 0

申请ini。不确定这是否有帮助。