这是我的代码
<?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();
?>
为什么即使我没有登录,我也没有被重定向?
答案 0 :(得分:1)
是否有可能在$_POST
或$_GET
存在的情况下刷新页面,落入后面的header("Location: ...")
命令之一?
如果是这样,你想通过添加die();
来解决问题if (!isset($_SESSION['username'])) { header("Location: index.php"); die(); }
答案 1 :(得分:1)
使用exit()或die函数可以解决问题。但实际上只需要使用其中一种功能的情况非常有限。
我认为你可以通过增加一些条件来增强if条件。但这会增加你的代码行。
答案 2 :(得分:0)
根据我的经验,每次通过标题重定向时,其后续连接的代码都会执行。
例如:如果您有一个else/else if
以及一个if
(具有重定向代码),那么它们也会被执行并且重定向永远不会发生。但是,如果您将条件分解为单个ifs
,那么在输入一个if
之后如果存在重定向,那么在if
中的标头代码之后没有后续代码,则重定向将发生。
最好全部使用die()
/ exit()
以避免出现差异。