有问题的重定向方法在每个页面上设置会话值。在访问页面时,将取消设置所有先前页面会话,并设置当前页面的会话值。在重定向时,将调用一个函数,该函数检查会话设置的页面并执行重定向。
首次访问网页时,通过调用clear_sessions();
取消设置任何网页“访问”会话
clear_sessions(){
//example
unset($_SESSION['search_product_page']);
unset($_SESSION['search_inventory_page']);
};
在当前页面上设置会话
$_SESSION['search_inventory_page'] = 1;
呼叫重定向
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();
}
}
这似乎是一种非常笨重的方式。关于我应该如何处理重定向的任何建议?
感谢。
答案 0 :(得分:1)
所以,只是想了解。基本上,您的页面执行步骤1和2,运行其他代码,然后在结束时执行步骤3?如果是这样的话,我可能会废除将重定向抽象为函数。或者,如果你这样做,至少删除Sessions的使用。它太乱了,没必要。它还降低了可读性并降低了灵活性。您无法轻松处理页面上的条件重定向。
我会直接在代码中插入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);
答案 1 :(得分: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();
}