Php 如何处理对会话_start()的调用失败?

Php 如何处理对会话_start()的调用失败?,php,session,Php,Session,根据 如果会话成功启动,此函数返回true,否则返回false 但是,该页面没有提供任何关于可能导致此函数返回false的情况的详细信息 因此,处理此返回值的建议(最佳实践)方法是什么 忽略它,因为它意味着会话已启动 是否因为指示严重错误而引发致命错误/异常 是否重试,因为这可能是间歇性问题 还有别的吗 作为参考,该页面上的示例中没有一个包含检查返回值的代码(包括注释部分中的几乎所有示例)。虽然这可能指向选项1,但我不太愿意从中推断太多,因为这可能只是草率的文档 补充资料 该页面包括一个注释,返

根据

如果会话成功启动,此函数返回
true
,否则返回
false

但是,该页面没有提供任何关于可能导致此函数返回false的情况的详细信息

因此,处理此返回值的建议(最佳实践)方法是什么

  • 忽略它,因为它意味着会话已启动
  • 是否因为指示严重错误而引发致命错误/异常
  • 是否重试,因为这可能是间歇性问题
  • 还有别的吗
  • 作为参考,该页面上的示例中没有一个包含检查返回值的代码(包括注释部分中的几乎所有示例)。虽然这可能指向选项1,但我不太愿意从中推断太多,因为这可能只是草率的文档

    补充资料 该页面包括一个注释,返回值在PHP 7.1.0中发生了更改:

    7.1.0:
    session\u start()
    现在返回
    false
    ,并且在会话启动失败时不再初始化
    $\u session

    我们还可以看到,在早期的PHP版本中,关于返回值的处理方式也有一些变化:

    5.3.0:如果会话无法启动,则返回FALSE。返回了以前的TRUE

    4.3.3:从PHP4.3.3开始,在会话之前启动后调用session_start()将导致级别E_通知错误。此外,第二次会话启动将被忽略

    我不知道如何理解上面的内容——我真的不明白“无法启动”是什么意思,也不明白PHP7.1.0中的更改指的是什么,因为它似乎与PHP5.3.0中已经发生的更改相同

    更新 完全巧合的是,我刚刚在另一个项目中遇到了一个可能导致会话无法启动的场景

    如果提供的会话ID包含无效字符,则调用
    会话\u start()
    将无法启动会话。这可能是由于cookie中的无效ID造成的(不太可能发生,除非是恶意的),或者可以通过调用
    session\u ID()
    强制执行

    考虑到这一点,我成功地构建了一个示例脚本,该脚本触发了
    会话\u start()
    失败,可以是:

    
    
    <?php
    
    // Buffer output so we don't output any content before headers are set.
    ob_start();
    
    var_dump($_SESSION);
    
    print("----------------\n");
    
    session_id("!!!");
    $Result = session_start();
    
    print("----------------\n");
    
    var_dump($Result);
    var_dump($_SESSION);
    
    ob_end_flush();