PHP创建会话并跳转前显示提示消息问题求助
问题原因
PHP是服务器端执行的脚本,默认情况下所有输出会被缓冲,直到脚本执行完毕才会一次性发送给浏览器。你用sleep(3)的时候,服务器在执行休眠操作,这时候成功提示的HTML还在服务器的缓冲区里,根本没发送到浏览器。等服务器休眠结束,马上设置会话并执行跳转,浏览器刚收到内容就被重定向了,自然看不到提示。
推荐解决方案:用JavaScript实现客户端延迟跳转
这是最可靠的方法,让服务器先把成功提示和跳转脚本发送给浏览器,浏览器渲染提示后,在客户端计时3秒再跳转。
修改后的代码示例:
if(mysqli_query($connect, $query)){ // 先设置会话(服务器端操作不影响前端显示) $_SESSION['email'] = "你的邮箱值"; // 输出成功提示 echo '<div class="alert alert-success" role="alert">Foi registado com sucesso!</div>'; // 输出JS延迟跳转代码,替换成你的目标页面地址 echo '<script> setTimeout(function() { window.location.href = "跳转目标页面.php"; }, 3000); // 3000毫秒=3秒 </script>'; exit; // 确保脚本不再执行后续内容 }
备选方案:PHP输出缓冲控制(不推荐)
如果你一定要用PHP的sleep,可以通过强制刷新输出缓冲区让浏览器提前显示内容,但这个方法受服务器配置和浏览器影响较大,稳定性不如JS方案:
if(mysqli_query($connect, $query)){ // 开启输出缓冲 ob_start(); // 输出成功提示 echo '<div class="alert alert-success" role="alert">Foi registado com sucesso!</div>'; // 强制刷新缓冲区,把内容发送给浏览器 ob_flush(); flush(); // 服务器端休眠3秒 sleep(3); // 设置会话并跳转 $_SESSION['email'] = "你的邮箱值"; header("Location: 跳转目标页面.php"); exit; }
注意:有些服务器的output_buffering配置可能会覆盖手动刷新操作,部分浏览器也会等待一定字节数的内容才会渲染,所以这个方法可能在某些环境下依然不生效。
内容的提问来源于stack exchange,提问作者Slaveworx
相关产品推荐
相关产品推荐

