0

有问题的重定向方法在每个页面上设置一个会话值。当访问一个页面时,所有先前的页面会话都未设置,并且当前页面的会话值已设置。在重定向时调用一个函数,该函数检查在哪个页面上设置了会话并执行重定向。

详细说明

  1. 首次通过调用访问页面时取消设置任何页面“访问”会话clear_sessions();

    clear_sessions(){
        //example
        unset($_SESSION['search_product_page']);
        unset($_SESSION['search_inventory_page']);
    };
    
  2. 在当前页面设置会话

    $_SESSION['search_inventory_page'] = 1;
    
  3. 呼叫重定向

    function redirection(){
        if(isset($_SESSION['search_product_page'])){
            header("Location:search_product.php");
            exit();
        }
        elseif (isset($_SESSION['search_inventory_page'])){
            header("Location:search_inventory.php");
            exit();
        }
    }
    

这似乎是一种非常笨拙的方法。关于我应该如何处理重定向的任何建议?

谢谢。

4

2 回答 2

1

所以,只是试图理解。基本上,您的页面执行第 1 步和第 2 步,运行附加代码,然后在最后执行第 3 步?如果是这样,我可能会取消将重定向抽象为函数。或者,如果您这样做,至少删除会话的使用。这是混乱和不必要的。它还降低了可读性并降低了灵活性。您将无法轻松处理页面上的条件重定向。

我要么header("Location: ...");直接在代码中插入重定向,要么在函数声明中添加一个参数,redirection()以实现当前页面操作。

例如,在设置文件中,定义您的页面操作:

define("SEARCH_INVENTORY_PAGE__SUBMITTED", 1);
define("SEARCH_PRODUCT_PAGE__SUBMITTED", 2);

并在您的重定向功能中,您接受页面操作:

function redirection($action){
    switch($action) {
        case SEARCH_INVENTORY_PAGE__SUBMITTED:
            header("Location: closedTicket.php");
            break;
        case SEARCH_PRODUCT_PAGE__SUBMITTED:
            header("Location: editTicket.php");
            break;
        default:
            throw new Exception('Page action $action not defined.');
    }
    exit();
}

并通过操作从您的代码中调用函数,例如

redirection(SEARCH_INVENTORY_PAGE__SUBMITTED);
于 2013-09-14T07:41:49.983 回答
0
function redirect($url) {
    ob_start();
    header("Location:".$url);
    ob_flush();
    die();
}

试试这个代码,你可以通过调用这个函数来重定向。而且这段代码也

if(isset($_SESSION['search_product_page'])){
    redirect("editTicket.php");
    exit();
}
elseif (isset($_SESSION['search_inventory_page'])){
    redirect("Location:closedTicket.php");
    exit();
}
于 2013-09-14T07:40:24.817 回答