PHP即使满足条件也无法重定向

时间:2013-01-31 04:35:56

标签: 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['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();
    ?>

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

3 个答案:

答案 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()以避免出现差异。