即使满足条件,PHP也无法重定向
这是我的密码即使满足条件,PHP也无法重定向,php,redirect,Php,Redirect,这是我的密码 <?php if (!isset($_SESSION)) { session_start(); } if (!isset($_SESSION['username'])) { header("Location: index.php"); } ob_start(); if($_POST) { $id = $_POST['book_id']; $command = $_POST['comma
<?php
if (!isset($_SESSION)) { session_start(); }
if (!isset($_SESSION['username'])) { header("Location: index.php"); }
ob_start();
if($_POST) {
$id = $_POST['book_id'];
$command = $_POST['command'];
$sourcePage = $_POST['source'];
} else if ($_GET){
$command = $_GET['command'];
$sourcePage = $_GET['source'];
$id = $_GET['book_id'];
} else {
header("Location: index.php");
}
// if command is 2 then show cart content
if($command == 2) {
showCart();
// if command is 1 then add book to cart
} else if($command == 1) {
addToCart($id);
header("Location: $sourcePage");
// if command is 0, then remove book from cart
} else if($command == 0) {
deleteFromCart($id);
header("Location: $sourcePage");
} else if(!isset($command)){
header("Location: index.php");
}
ob_flush();
?>
为什么即使我没有登录,我也没有被重定向?是否有可能在
$\u POST
或$\u GET
存在的情况下,页面只是在刷新,落入后面的标题(“位置:…”
命令之一
如果是这样,您可能希望通过添加一个die()来解决此问题
使用exit()或die函数可以解决此问题。但实际需要使用其中一个函数的情况非常有限
我认为你可以通过增加一些条件来增强if-else条件。但这会增加代码行数 根据我的经验,每次通过头进行重定向时,都会执行下面的连接代码 例如:如果您有一个
else/else if
和一个if
(其中包含重定向代码),那么它们也将被执行,并且重定向永远不会发生。但是,如果将条件分解为单独的if
,然后在输入一个if
之后,如果存在重定向,则在if
中的标题代码之后没有后续代码,则将发生重定向
最好全面使用
die()
/exit()
以避免差异。删除输出缓冲。。或者让整个代码也执行,你应该在header中使用绝对url你说的是从上面所有的重定向?第一个header。事实上,所有这些都不起作用,但重要的是第一个。耶,这就解决了问题。谢谢你。尽管如此,我还是有点惊讶,$\u POST和$\u GET部分竟然被执行了。第二行不应该在到达该部分之前重定向页面吗?重定向发生了,但代码继续执行并在重定向之前完成,导致浏览器也接收到第二个重定向,这就是为什么die()代码>修复该问题(防止发生第二次重定向)
if (!isset($_SESSION['username'])) { header("Location: index.php"); die(); }