【问题标题】:session has already been started by session.auto-start or session_start() in Zend project会话已经由 Zend 项目中的 session.auto-start 或 session_start() 启动
【发布时间】:2013-07-23 21:21:53
【问题描述】:

我正在使用 Zend Framework 版本 1.11.11 编写 php。 有时我收到错误

session has already been started by session.auto-start or session_start()

页面刷新后此错误消失。我读了几篇关于这个问题的帖子。我检查了配置并且 session.auto_start 设置为关闭。我不直接调用 session_start(),因为我只使用 Zend_Session 组件来处理会话。

此问题的原因可能是什么?可以连接垃圾收集器吗?

【问题讨论】:

  • 阅读这条消息,它很容易解释
  • 我理解错误信息的含义。真正让我困惑的是错误很少发生。如果我以错误的方式使用会话,则每次调用任何操作时都应该显示错误。还是我错了?
  • 检查所有包含的内容,看看哪个使用了session_start()。尤其要检查仅包含在您收到错误的情况下的脚本。

标签: php zend-framework session


【解决方案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

以上命令假设您运行的是 Ubuntu。在其他发行版中,调整用户名/路径。

【讨论】:

    【解决方案2】:

    我猜这是在 debian 服务器上?如果没有,这可能不是解决方案……但我们在基于 Ubuntu 的安装中遇到了这个问题。

    发生这种情况是因为已安装的 PHP 包和正在运行以处理会话清理的 cron 脚本的组合。 (无论出于何种原因......不知道他们为什么要这样做......)

    我们通过以下方式取得了成功: - 删除 cron 作业以清除 PHP 会话内容(相信我,它在那里 - 很烦人) - chmod www-data:www-data /var/lib/php5 (或等效信息) - session.gc_probability = 1 在你的 php.ini 文件中

    可能不是最好的解决方案,但它为我解决了问题。

    【讨论】:

    • 那么,这次修改后,你收到什么异常了吗?您认为在 Ubuntu 中更改会话文件处理的设计方式是否安全?
    • 执行此操作后,我不再有任何问题。我认为这是安全的,我们已经几个月没有遇到任何问题了。当然,您的里程可能会有所不同
    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多