页面重定向后脚本仍执行?PHP header跳转异常求助
重定向后PHP脚本仍执行后续代码的原因及解决办法
问题场景
在dashboard.php中编写了以下代码:
mail('xxx@gmail.com', 'Dashboard 1', 'isLoggedin = ' . $isLoggedIn); if(!$isLoggedIn) { header("Location: https://example.com/account/login.php"); } mail('xxx@gmail.com', 'Dashboard 2', 'Dashboard 2');
逻辑要求未登录用户访问该页面时会被重定向到登录页,但实际测试出现以下不符合预期的情况:
- 收到第一封邮件(
isLoggedin为空,符合预期) - 成功重定向到
login.php(符合预期) - 收到第二封
Dashboard 2邮件(不符合预期)
原因分析
header("Location: ...")的作用只是向浏览器发送一个HTTP重定向的响应头,并不会立即终止当前PHP脚本的执行。浏览器收到重定向指令后会跳转,但服务器上的dashboard.php脚本会继续执行完剩余代码,所以后续的mail()函数依然会被调用。
解决办法
在发送重定向头之后,立刻调用exit()或die()函数终止脚本执行,这样后续代码就不会被运行了。修改后的代码如下:
mail('xxx@gmail.com', 'Dashboard 1', 'isLoggedin = ' . $isLoggedIn); if(!$isLoggedIn) { header("Location: https://example.com/account/login.php"); exit; // 或 die(); } mail('xxx@gmail.com', 'Dashboard 2', 'Dashboard 2');
内容的提问来源于stack exchange,提问作者Arie
相关产品推荐
相关产品推荐

