代码之家  ›  专栏  ›  技术社区  ›  Jens

会话_start()在特定脚本上无提示失败

  •  1
  • Jens  · 技术社区  · 5 年前

    用最简单的代码

    <?php
        $ok = session_start();
        echo var_dump($ok);
    ?>
    

    启动会话失败, $ok 为false,未创建会话cookie。同样,使用 session_name('xxx'); 没有效果。这个 $_SESSION 如果在另一个脚本中设置,变量也不会保持值。

    同一服务器上使用会话功能的其他旧脚本按预期工作。在本地主机上运行时,相同的脚本可以正常工作。

    我在错误分析过程中执行的步骤,其中:

    1. 为了得到上面的脚本,我删除了命名会话和其他所有内容(最简单的例子再现了错误)。
    2. 我查看了提供商提供的错误日志,但没有找到任何条目。
    3. 我确保不存在其他空白,并且所有脚本都立即以 session_start() .
    4. 在我展示的同一个脚本中 phpinfo() 标记:
      1. Session Support: enabled
      2. session.auto_start: Off
      3. session.use_cookies: 1
      4. session.use_only_cookies: 1 (有争议,但因为其他剧本都有用…)
    5. 我开始怀疑自己的理智。
    6. 我记得以前在文本文件中遇到过以字节顺序标记形式出现的“不可见字符”,我想可能是编码之类的问题(请参阅下面的答案)。

    可能导致这些症状的其他错误来源是什么?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Jens    5 年前

    问题是,脚本文件被编码为notepad++调用的内容 UTF-8 BOM 在Windows下。

    enter image description here

    将其转换为直线 UTF-8 在记事本++中,重新装载脚本可以立即解决所有问题。

    所以我猜在文件中的某个地方留下了一个错误的字节顺序标记,导致服务器上的PHP安装无法识别或无法解析脚本文件。

    编辑:Mario在 https://stackoverflow.com/a/8028987/3055288