session_start()在特定脚本上无提示失败

时间:2019-01-18 13:55:30

标签: php session

以最简单的代码

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

启动会话失败,$ok为假,并且未创建会话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 个答案:

答案 0 :(得分:1)

问题在于,脚本文件被编码为Windows下Notepad ++调用的UTF-8 BOM

enter image description here

在Notepad ++中将其转换为直线UTF-8并重新上传脚本会立即解决所有问题。

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

编辑:同样的根本原因由马里奥在https://stackoverflow.com/a/8028987/3055288

进行了更详细的描述。