【问题标题】:PHP: A session had already been started - ignoring session_start() comes only in windows [duplicate]PHP:会话已经开始 - 忽略 session_start() 仅在 Windows [重复]
【发布时间】:2012-11-25 09:37:42
【问题描述】:

可能重复:
PHP sessions that have already been started

我已经在 Windows 和 Mac 上使用相同的代码运行了我的 PHP 项目。但是当我在 Windows 而非 Mac 中运行我的项目时出现此错误。

错误信息是。

A session had already been started - ignoring session_start()

仅在 Windows 系统上提供。但在 Mac 中我没有收到任何错误消息。 请任何人给我一个解决方案.....

【问题讨论】:

  • 你能跟踪你使用 session_start 的所有时间吗?
  • 这两台机器的 error_reporting 值不同
  • @lbu 是的,我跟踪会话开始,我也尝试过,if(!isset($_SESSION)){ session_start();}。但没有得到正确的解决方案
  • @PHP Bugs 请告诉我在哪里可以找到错误报告值
  • 您可以从您的php.ini 文件中看到这一点。从phpinfo 页面查找此文件的位置。

标签: php


【解决方案1】:

您说您以支票开始会话:

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

事实是 $_SESSION 总是存在的,如果你没有在里面放东西,那么它总是空的,所以这个语句总是返回 true。

【讨论】:

  • 谢谢!我使用 PHP 5.6 进行开发(使用 session_status() 来检查会话),但在服务器上只支持 PHP 5.3,所以我只是通过你的回答来修复它。
【解决方案2】:

我不知道为什么 windows 会显示错误而 Mac 不会。 但是您可以尝试将所有the session_start()替换为

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

这可能会对你有所帮助..

【讨论】:

    【解决方案3】:

    此消息是E_NOTICE。您只在 Windows 机器上看到它的原因很可能是因为您的 error_reporting 设置不同。

    如果您在php.ini 中搜索error_reporting,如果您不想看到它,则应排除E_NOTICE

    或者,将您的代码修复为不多次启动会话。理想情况下,您只有一个可以启动会话的核心代码文件,而没有其他 session_start() 实例(即不要将其放在每一页上)。然后,您可以在每个页面上包含它,或者创建一个路由模式,以确保在每个页面加载时调用初始化代码。

    【讨论】:

      【解决方案4】:

      查看 php.ini (http://php.net/session.auto-start) 中的 session.auto_start,很可能会话是自动启动的

      【讨论】:

      • 我检查了php.ini文件,发现auto_start=0
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2019-09-16
      • 2012-05-25
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      相关资源
      最近更新 更多