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