【问题标题】:Recommended way to manage page redirection管理页面重定向的推荐方法
【发布时间】:2013-09-14 06:51:17
【问题描述】:

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

详细说明

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

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

谢谢。

【问题讨论】:

  • 关于标记的注释:您将制表符与空格混合在一起作为空格。 SO 对代码前的 4 个空格反应良好。在您的有序列表中,如果文本是列表中的一个项目,那么它应该已经缩进了 4 个空格。因此,要将文本标记为代码,还需要另外 4 个空格。因此,您的代码应以 8 个空格开头,并且所有制表符都需要替换为 4 个空格。仅供参考。我已经在这篇文章中为你编辑了。
  • @garromark:谢谢。

标签: php session redirect


【解决方案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);

【讨论】:

  • 嗯..所以我认为您的解决方案会起作用,但它似乎并没有解决主要问题之一;例如,我可以从search_product.phpsearch_inventory.php 页面访问查看产品页面。如何从view_product.php 页面重定向到正确的页面?我知道我可以通过url 传递SEARCH_PRODUCT_PAGE__SUBMITTED 常量,但这并不比我目前的解决方案更好。
  • 你的意思是你在处理完某事后试图返回一个页面?这将是对会话变量的合理使用。完成此操作的另一种方法是,如果您正在提交表单,则将返回 url 作为变量作为 POST 数据的一部分传递。是的,这可以作为 GET 变量(即作为 URL 的一部分)传入,并且可以作为整数发送,因为这就是变量的定义方式。
【解决方案2】:
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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 2011-12-25
    • 2017-07-23
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    相关资源
    最近更新 更多