$_SESSION["some_value"] = 4;
header("Location: another-file.php");
$_SESSION["some_value"] = 5;
$_SESSION["some_value"]
的价值是什么?
发布于 2017-03-01 00:40:50
你应该总是在重定向之后死掉()或者退出()(或者正如Mark B所指出的,使用ignore_user_abort() ),因为你不能确定会发生什么。
虽然一些代码会在头位置重定向后执行,但重要的是要注意,并不是所有在它之后的代码都会执行。
根据您的示例,是的,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‘the _value’等于‘完成!’--但是我运行了代码,结果并非如此。
以下是我的结果:
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就等于“完成!”所以,如果你打算做一些关键的事情,比如记录日志或数据库查询,或者在重定向后发送电子邮件,请记住这一点。
发布于 2010-09-12 10:41:51
该值为5。
您可以使用header
输出比Location
标头多得多的标头,其中大多数您不希望停止代码执行。如果您想停止代码执行,则需要显式调用exit
。
发布于 2010-09-12 11:28:14
一旦你发出了头文件,你就开始了代码和and服务器/浏览器之间的竞争。通常,一旦浏览器接收到重定向,它就会关闭运行脚本的连接,并开始连接到新的重定向URL。当连接关闭时,web服务器通常会尝试终止脚本。
您可能很幸运,能够完成您想要做的任何其他事情,或者您可能不走运,在header()
调用之后,脚本甚至无法到达下一行。
不过,还有一个ignore_user_abort()
函数,它可以让您的脚本继续运行,而不管连接的状态如何。
https://stackoverflow.com/questions/3693537
复制相似问题