$_SESSION["some_value"] = 4;
header("Location: another-file.php");
$_SESSION["some_value"] = 5;
$_SESSION["some_value"]
的值是什么?
$_SESSION["some_value"] = 4;
header("Location: another-file.php");
$_SESSION["some_value"] = 5;
$_SESSION["some_value"]
的值是什么?
这个值是5。
你可以使用header
输出许多不止是Location
头部的头部信息,大多数情况下你不想停止代码执行。如果你需要停止代码执行,你需要显式调用exit
函数。
在重定向之后,你应该始终使用die()或exit()(或者根据Mark B的指示使用ignore_user_abort()),因为否则你无法确定会发生什么。
尽管在header location重定向后有些代码将被执行,但重要的是要注意,并非所有代码都一定会得到执行。
就你的例子而言,是的,some_value将等于5。但在某个时候,脚本将会被过早地终止。
请看以下例子:
session_start();
$_SESSION["some_value"] = 'original value';
header("Location: /index.php/test2");
$start_time = microtime(true);
for($i = 0; $i <= 100000; $i ++)
{
password_hash($i); // slow it down
$_SESSION["some_value"] = $i;
$_SESSION['time'] = microtime(true) - $start_time;
}
$_SESSION['some_value'] = 'finished!';
如果其他答案都正确,你会认为 $_SESSION['some_value'] 等于 'finished!' -- 但是我运行了代码,情况并非如此。some_value: 174
time: 0.0026998519897461
第二次试验:
some_value: 218
time: 0.0033109188079834
第三次试验:
some_value: 218
time: 0.0035371780395508
第四次试验:
some_value: 174
time: 0.0026431083679199
第五个试验:
some_value: 174
time: 0.0027921199798584
如果我在上面的脚本中实现ignore_user_abort(TRUE);,那么some_value确实等于"finished!",所以如果你打算在重定向之后执行一些关键操作,例如日志记录、数据库查询或发送电子邮件,请记住这一点。header()
调用后的下一行。ignore_user_abort()
,可以让你的脚本无论连接状态如何都能继续执行。exit;
。如果剩余的代码是否执行是随机的,那么这将不是一个非常有用的功能,对吧? - Tor Valamoheader
命令不会中断您的代码流程。即使遇到它,浏览器仍会下载您的页面,即使它没有显示。考虑 404 页面,尽管它们是错误页面,但仍然会被浏览器处理(尽管重定向时不会呈现)。< /p >