0

这是我的代码

    <?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();
    ?>

为什么即使我没有登录,我也没有被重定向?

4

3 回答 3

1

页面是否可能只是在存在$_POST$_GET存在的条件下刷新,落入后面的header("Location: ...")命令之一?

如果是这样,您希望通过添加 die(); 来解决问题。

if (!isset($_SESSION['username'])) { header("Location: index.php"); die(); }
于 2013-01-31T04:40:05.393 回答
1

使用 exit() 或 die 函数可能会解决问题。但实际上需要使用这些功能之一的情况非常有限。

我认为您可以通过设置更多条件来增强 if else 条件。但这会增加你的代码行数。

于 2013-01-31T06:41:51.740 回答
0

根据我的经验,每次通过标头重定向时,都会执行其以下连接的代码。

例如:如果你有一个else/else if和一个if(它有重定向代码),那么它们也将被执行并且重定向永远不会发生。但是,如果您将条件分解为单个条件,ifs则在输入一个条件后,if如果存在重定向,则在该标头代码之后没有后续代码,if则将发生重定向。

最好使用die()/exit()全部以避免差异。

于 2013-02-01T11:57:46.720 回答